Wawancara TypeScript: 20 pertanyaan dan jawaban

TypeScript didasarkan pada sintaks dan semantik yang sama yang akrab bagi jutaan pengembang JavaScript. TypeScript memungkinkan untuk bekerja dengan fitur JS terbaru dan masih muncul, termasuk yang tersedia di ECMAScript 2015, dan yang saat ini hanya ada dalam bentuk kalimat. Di antara fitur-fitur ini, misalnya, fungsi dan dekorator asinkron. Semua ini bertujuan membantu pengembang untuk membuat aplikasi yang andal dan modern.

Program TypeScript dikompilasi menjadi kode JavaScript biasa yang dapat dijalankan di browser apa pun atau di Node.js. Kode ini akan dipahami oleh mesin JS apa pun yang mendukung ECMAScript 3 atau standar yang lebih baru.



Materi, terjemahan yang kami terbitkan hari ini, berisi diskusi dua puluh pertanyaan yang mungkin menanyakan seseorang yang akan lulus wawancara, mengklaim posisi programmer TypeScript.

Pertanyaan No. 1 (1). Apa itu TypeScript dan mengapa menggunakannya daripada JavaScript?


Dalam tanda kurung, setelah nomor pertanyaan, kompleksitasnya ditunjukkan, dievaluasi pada skala lima poin.

TypeScript (TS) adalah superset dari JavaScript (JS), di antara fitur-fitur utama di antaranya adalah kemungkinan penugasan tipe statis eksplisit, dukungan untuk kelas dan antarmuka. Salah satu keuntungan utama TS over JS adalah kemampuan untuk membuat, dalam berbagai IDE, lingkungan pengembangan yang memungkinkan, tepat dalam proses memasukkan kode, untuk mengidentifikasi kesalahan umum. Penggunaan TypeScript dalam proyek besar dapat meningkatkan keandalan program, yang, pada saat yang sama, dapat digunakan di lingkungan yang sama di mana aplikasi JS biasa bekerja.

Berikut ini beberapa detail tentang TypeScript:

  • TypeScript mendukung edisi modern standar ECMAScript, kode yang ditulis menggunakan yang dikompilasi dengan mempertimbangkan kemungkinan pelaksanaannya pada platform yang mendukung versi standar yang lebih lama. Ini berarti bahwa pemrogram TS dapat menggunakan kemampuan ES2015 dan standar yang lebih baru, seperti modul, fungsi panah, kelas, operator penyebaran, perusakan, dan melakukan apa yang dia lakukan di lingkungan yang ada yang belum mendukung standar ini.
  • TypeScript adalah add-on untuk JavaScript. Kode yang ditulis dalam JavaScript murni adalah kode TypeScript yang valid.
  • TypeScript memperluas JavaScript dengan kemampuan untuk menetapkan jenis secara statis. Sistem tipe TS cukup luas. Yaitu, itu termasuk antarmuka, enumerasi, tipe hybrid, tipe generik, tipe union dan tipe persimpangan, pengubah akses, dan banyak lagi. Menggunakan TypeScript juga membuat segalanya sedikit lebih mudah dengan menggunakan inferensi tipe.
  • Penggunaan TypeScript, dibandingkan dengan JavaScript, secara signifikan meningkatkan proses pengembangan. Faktanya adalah bahwa IDE, secara real time, menerima informasi jenis dari kompiler TS.
  • Saat menggunakan mode null ketat (flag compiler --strictNullChecks digunakan untuk ini), kompiler TypeScript tidak mengizinkan penetapan null dan undefined variabel tipe-tipe di mana, dalam mode ini, penggunaan nilai-nilai ini tidak diperbolehkan.
  • Untuk menggunakan TypeScript, Anda perlu mengatur proses pembuatan proyek, yang mencakup tahap mengkompilasi kode TS dalam JavaScript. Kompiler dapat menyematkan peta sumber dalam file JS yang dihasilkannya, atau membuat file .map terpisah. Ini memungkinkan Anda untuk mengatur breakpoint dan memeriksa nilai-nilai variabel selama eksekusi program, bekerja secara langsung dengan kode TypeScript.
  • TypeScript adalah proyek Microsoft sumber terbuka yang dirilis di bawah lisensi Apache 2. Inisiator pengembangan TypeScript adalah Anders Halesberg. Dia terlibat dalam pembuatan Turbo Pascal, Delphi dan C #.

Sumber

Pertanyaan No. 2 (1). Beri tahu kami tentang jenis umum dalam TypeScript.


Jenis umum (generik) memungkinkan Anda untuk membuat komponen atau fungsi yang dapat bekerja dengan jenis yang berbeda, dan tidak dengan yang mana pun. Pertimbangkan sebuah contoh:

 /**       */ class Queue<t> { private data = []; push = (item: T) => this.data.push(item); pop = (): T => this.data.shift(); } const queue = new Queue<number>(); queue.push(0); queue.push("1"); //  :      ,      

Sumber

Pertanyaan No. 3 (2). Apakah TypeScript mendukung semua prinsip pemrograman berorientasi objek?


Ya, benar. Ada empat prinsip dasar pemrograman berorientasi objek:

  • Enkapsulasi
  • Warisan
  • Abstraksi
  • Polimorfisme

Menggunakan alat TypeScript yang sederhana dan jelas, Anda dapat menerapkan semua prinsip ini.

Sumber

Pertanyaan No. 4 (2). Bagaimana dalam TypeScript untuk memeriksa nilai-nilai untuk kesetaraan nol dan tidak terdefinisi?


Untuk melakukan pemeriksaan semacam itu, cukup menggunakan konstruksi berikut:

 if (value) { } 

Ekspresi dalam tanda kurung akan true jika itu bukan sesuatu dari daftar berikut:

  • null
  • undefined
  • NaN
  • Baris kosong
  • 0
  • false

TypeScript mendukung aturan konversi tipe yang sama seperti JavaScript.

Sumber

Pertanyaan No. 5 (2). Bagaimana cara mengimplementasikan properti kelas yang konstan dalam TypeScript?


Di TypeScript, ketika mendeklarasikan properti kelas, Anda tidak dapat menggunakan kata kunci const . Ketika Anda mencoba menggunakan kata kunci ini, pesan kesalahan berikut ditampilkan: A class member cannot have the 'const' keyword . TypeScript 2.0 memiliki pengubah readonly yang memungkinkan Anda untuk membuat properti kelas read-only:

 class MyClass {   readonly myReadonlyProperty = 1;   myMethod() {       console.log(this.myReadonlyProperty);   } } new MyClass().myReadonlyProperty = 5; // ,        

Sumber

Pertanyaan No. 6 (2). Apa itu file .map dalam TypeScript?


File dengan peta sumber .map store extension, yang berisi data tentang korespondensi kode yang ditulis dalam kode TypeScript ke JavaScript yang dibuat atas dasar. Banyak debugger dapat bekerja dengan file ini (misalnya, Visual Studio dan alat pengembang Chrome). Hal ini memungkinkan, selama debugging, untuk bekerja dengan kode sumber program TypeScript, dan tidak dengan padanan JS-nya.

Sumber

Pertanyaan No. 7 (2). Apa yang getter dan setter dalam TypeScript?


TypeScript mendukung getter dan setter, yang memungkinkan Anda untuk mengontrol akses ke anggota objek. Mereka memberi pengembang kontrol atas membaca dan menulis properti dari objek.

 class foo { private _bar:boolean = false; get bar():boolean {   return this._bar; } set bar(theBar:boolean) {   this._bar = theBar; } } var myBar = myFoo.bar;  //    myFoo.bar = true;  //    

Sumber

Pertanyaan No. 8 (2). Bisakah TypeScript digunakan dalam pengembangan server, dan jika demikian, bagaimana?


Program yang ditulis dalam TypeScript tidak hanya cocok untuk pengembangan front-end, tetapi juga untuk membuat aplikasi server. Misalnya, di TS Anda dapat menulis program untuk platform Node.js. Ini memberi programmer alat tambahan untuk kontrol tipe dan memungkinkan Anda untuk menggunakan fitur bahasa lainnya. Untuk membuat aplikasi server pada TS, Anda hanya perlu mengatur proses pemrosesan kode yang benar, pada input file TypeScript yang diterima, dan outputnya adalah file JavaScript yang cocok untuk dieksekusi di Node.js. Untuk mengatur lingkungan seperti itu, Anda harus terlebih dahulu menginstal kompiler TypeScript:

 npm i -g typescript 

Parameter kompiler diatur menggunakan file tsconfig.json , yang menentukan, antara lain, tujuan kompilasi dan tempat di mana file JS yang sudah jadi harus ditempatkan. Secara umum, file ini sangat mirip dengan file konfigurasi babel atau webpack:

 { "compilerOptions": {   "target": "es5",   "module": "commonjs",   "declaration": true,   "outDir": "build" } } 

Sekarang, asalkan kompiler memiliki sesuatu untuk diproses, Anda perlu menjalankannya:

 tsc 

Dan akhirnya, dengan mempertimbangkan fakta bahwa file JS yang cocok untuk dieksekusi di lingkungan Node.js terletak di folder build , Anda perlu menjalankan perintah berikut di direktori root proyek:

 node build/index.js 

→ Sumber

Pertanyaan No. 9 (3). Beri tahu kami tentang komponen utama TypeScript.


TypeScript memiliki tiga komponen utama:

  • Bahasa Ini, dari sudut pandang pengembang, adalah bagian terpenting dari TypeScript. "Bahasa" adalah sintaks, kata kunci, semua yang memungkinkan Anda untuk menulis program dalam TypeScript.
  • Kompiler TypeScript memiliki kompiler open source, ini adalah cross-platform, open-spec, dan ditulis dalam TypeScript. Kompiler mengubah kode TypeScript ke kode JavaScript. Selain itu, jika ada sesuatu yang salah dengan program, ini akan menampilkan pesan kesalahan. Ini memungkinkan Anda untuk menggabungkan beberapa file TypeScript menjadi satu file JS output tunggal dan dapat membuat peta kode.
  • Alat bantu. Alat bantu TypeScript dirancang untuk memfasilitasi proses pengembangan dengan penggunaannya dalam berbagai IDE. Diantaranya adalah Visual Studio, VS Code , Sublime, berbagai alat untuk meluncurkan TS-code dengan cepat, dan lainnya.

Sumber

Pertanyaan No. 10 (3). Apakah ada kesalahan dalam kode TypeScript yang Anda berikan? Jelaskan jawaban Anda.


Berikut ini cuplikan kode:

 class Point {   x: number;   y: number; } interface Point3d extends Point {   z: number; } let point3d: Point3d = {x: 1, y: 2, z: 3}; 

Tidak ada kesalahan dalam kode ini. Deklarasi kelas membuat dua entitas: ini adalah tipe data yang digunakan untuk membuat instance kelas, dan fungsi konstruktor. Karena kelas membuat tipe data, Anda bisa menggunakannya di mana Anda bisa menggunakan antarmuka.

Sumber


Sangat suka film ini)

Pertanyaan No. 11 (3). Beri tahu kami tentang menggunakan dekorator properti di TypeScript.


Dekorator dapat digunakan untuk mengubah perilaku kelas, dan Anda bisa mendapatkan manfaat lebih banyak dari mereka ketika menggunakannya dengan kerangka kerja apa pun. Misalnya, jika kerangka kerja Anda memiliki metode yang aksesnya dibatasi (misalnya, itu dimaksudkan hanya untuk administrator), akan mudah untuk menulis dekorator metode @admin , yang akan melarang pengguna yang bukan administrator mengakses metode yang sesuai. Anda dapat membuat dekorator @owner yang memungkinkan Anda memodifikasi objek hanya untuk pemiliknya. Seperti apa dekorator yang terlihat:

 class CRUD {   get() { }   post() { }   @admin   delete() { }   @owner   put() { } } 

Sumber

Pertanyaan No. 12 (3). Bisakah TypeScript menggunakan fungsi yang sangat diketik sebagai parameter?


Perhatikan contoh berikut:

 class Foo {   save(callback: Function) : void {       //        var result : number = 42; //             //      -  ,        number?       callback(result);   } } var foo = new Foo(); var callback = (result: string) : void => {   alert(result); } foo.save(callback); 

Apakah mungkin untuk mengatur pekerjaan dengan callback yang diketik dalam metode save ? Tulis ulang kode untuk menunjukkan ini.

Di TypeScript, Anda dapat mendeklarasikan jenis panggilan balik, dan kemudian menulis ulang kode:

 type NumberCallback = (n: number) => any; class Foo {   //    save(callback: NumberCallback): void {       console.log(1)       callback(42);   } } var numCallback: NumberCallback = (result: number) : void => {   console.log("numCallback: ", result.toString()); } var foo = new Foo(); foo.save(numCallback) 

Sumber

Pertanyaan No. 13 (3). Bagaimana membuat kelas dinyatakan dalam modul yang dapat diakses di luar modul?


Kelas yang dideklarasikan dalam modul tersedia dalam modul ini. Di luar, akses ke mereka tidak dapat diperoleh.

 module Vehicle {   class Car {       constructor (           public make: string,           public model: string) { }   }   var audiCar = new Car("Audi", "Q7"); } //     var fordCar = Vehicle.Car("Ford", "Figo"); 

Dalam kode di atas, kesalahan akan terjadi ketika mencoba menginisialisasi variabel fordCar . Untuk membuat kelas dinyatakan dalam modul yang dapat diakses di luar modul ini, Anda perlu menggunakan kata kunci export :

 module Vehicle {   export class Car {       constructor (           public make: string,           public model: string) { }   }   var audiCar = new Car("Audi", "Q7"); } //       var fordCar = Vehicle.Car("Ford", "Figo"); 

Sumber

Pertanyaan No. 14 (3). Apakah TypeScript mendukung fungsi yang berlebihan?


TypeScript mendukung fungsi yang berlebihan, tetapi implementasi mekanisme ini berbeda dari apa yang dapat dilihat dalam bahasa berorientasi objek lainnya. Yaitu, di TS mereka hanya membuat satu fungsi dan sejumlah iklan. Ketika kode tersebut dikompilasi dalam JavaScript, hanya satu fungsi spesifik yang terlihat. Mekanisme ini berfungsi karena fungsi JS dapat dipanggil dengan memberikan mereka sejumlah parameter yang berbeda.

 class Foo {   myMethod(a: string);   myMethod(a: number);   myMethod(a: number, b: string);   myMethod(a: any, b?: string) {       alert(a.toString());   } } 

Sumber

Pertanyaan No. 15 (4). Apa yang salah dengan kode yang diberikan kepada Anda?


Berikut ini kode yang dimaksud:

 /* */ interface Fetcher {   getObject(done: (data: any, elapsedTime?: number) => void): void; } 

Disarankan agar Anda menggunakan parameter opsional dalam panggilan balik hanya jika Anda benar-benar memahami konsekuensi dari langkah tersebut. Kode ini memiliki arti yang sangat spesifik: panggilan balik yang done dapat dipanggil dengan argumen 1 atau 2. Penulis kode mungkin bermaksud memberi tahu kami bahwa panggilan balik mungkin tidak memperhatikan parameter elapsedTime , tetapi untuk mencapai ini, Anda selalu dapat membuat panggilan balik yang membutuhkan lebih sedikit argumen.

Sumber

Pertanyaan No. 16 (4). Bagaimana cara membebani konstruktor kelas di dalam TypeScript?


TypeScript memungkinkan Anda untuk mendeklarasikan banyak varian metode, tetapi hanya ada satu implementasi, dan implementasi ini harus memiliki tanda tangan yang kompatibel dengan semua varian metode kelebihan beban. Untuk membebani konstruktor kelas, Anda dapat menggunakan beberapa pendekatan:

  • Anda dapat menggunakan parameter opsional:

     class Box {   public x: number;   public y: number;   public height: number;   public width: number;   constructor();   constructor(obj: IBox);   constructor(obj?: any) {          this.x = obj && obj.x || 0       this.y = obj && obj.y || 0       this.height = obj && obj.height || 0       this.width = obj && obj.width || 0;   } } 
  • Anda dapat menggunakan pengaturan default:

     class Box {   public x: number;   public y: number;   public height: number;   public width: number;   constructor(obj : IBox = {x:0,y:0, height:0, width:0}) {          this.x = obj.x;       this.y = obj.y;       this.height = obj.height;       this.width = obj.width;   } } 
  • Anda dapat menggunakan kelebihan beban tambahan sebagai metode pabrik statis:

     class Person {   static fromData(data: PersonData) {       let { first, last, birthday, gender = 'M' } = data       return new this(           `${last}, ${first}`,           calculateAge(birthday),           gender       )   }   constructor(       public fullName: string,       public age: number,       public gender: 'M' | 'F'   ) {} } interface PersonData {   first: string   last: string   birthday: string   gender?: 'M' | 'F' } let personA = new Person('Doe, John', 31, 'M') let personB = Person.fromData({   first: 'John',   last: 'Doe',   birthday: '10-09-1986' }) 
  • Anda dapat menggunakan jenis gabungan:

     class foo {   private _name: any;   constructor(name: string | number) {       this._name = name;   } } var f1 = new foo("bar"); var f2 = new foo(1); 

Sumber

Pertanyaan No. 17 (4). Apa perbedaan antara antarmuka dan jenis kata kunci dalam TypeScript?


Berikut adalah contoh penggunaan kata kunci ini:

 interface X {   a: number   b: string } type X = {   a: number   b: string }; 

Tidak seperti deklarasi antarmuka, yang selalu mewakili jenis objek yang dinamai, menggunakan type kata kunci memungkinkan Anda untuk menentukan alias untuk semua jenis jenis, termasuk tipe primitif, tipe gabungan, dan tipe persimpangan.

Saat menggunakan kata kunci type alih-alih kata kunci interface , kemungkinan berikut ini hilang:

  • Antarmuka dapat digunakan dalam ekspresi extends atau implements , tetapi alias untuk tipe objek literal tidak bisa.
  • Antarmuka dapat memiliki beberapa deklarasi digabungkan, dan ketika menggunakan kata kunci type fitur ini tidak tersedia.

Sumber

Pertanyaan No. 18 (5). Beri tahu kami saat TypeScript menggunakan kata kunci yang mendeklarasikan.


Kata kunci declare digunakan dalam TypeScript untuk mendeklarasikan variabel, yang sumbernya mungkin file yang bukan file TypeScript.

Sebagai contoh, misalkan kita memiliki perpustakaan bernama myLibrary . Itu tidak memiliki file dengan deklarasi tipe TypeScript, ia hanya memiliki namespace myLibrary di namespace global. Jika Anda ingin menggunakan perpustakaan ini dalam kode TS Anda, Anda dapat menggunakan konstruksi berikut:

 declare var myLibrary; 

TypeScript akan menetapkan variabel myLibrary ke any . Masalahnya di sini adalah bahwa pada saat pengembangan Anda tidak akan memiliki petunjuk cerdas untuk perpustakaan ini, meskipun Anda dapat menggunakannya dalam kode Anda. Dalam situasi ini, Anda dapat menggunakan pendekatan lain yang mengarah ke hasil yang sama. Kita berbicara tentang menggunakan variabel tipe any :

 var myLibrary: any; 

Dalam kedua kasus, ketika menyusun kode TS dalam JavaScript, hasilnya sama, tetapi opsi declare lebih mudah dibaca. Penggunaan kata kunci ini mengarah pada pembuatan deklarasi eksternal yang disebut variabel (ambient declaration).

Pertanyaan No. 19 (5). Apa deklarasi variabel eksternal dalam TypeScript dan kapan mereka harus digunakan?


Deklarasi eksternal suatu variabel (ambient declaration) adalah mekanisme yang memungkinkan kompiler TypeScript mengetahui bahwa beberapa kode sumber ada di suatu tempat di luar file saat ini. Iklan eksternal membantu mengintegrasikan pustaka JavaScript pihak ketiga ke dalam program TS.

Deklarasi ini dibuat dalam tipe file deklarasi dengan ekstensi .d.ts. Variabel atau modul eksternal menyatakan seperti ini:

 declare module Module_Name { } 

File yang berisi kode eksternal harus dimasukkan dalam file TS yang menggunakannya, sebagai berikut:

 /// <reference path=" Sample.d.ts"></reference> 

Sumber

Pertanyaan No. 20 (5). Bisakah saya secara otomatis membuat materi iklan TypeScript dari pustaka JS?


JavaScript tidak selalu berisi informasi yang cukup yang memungkinkan TypeScript untuk secara otomatis menyimpulkan tipe. Oleh karena itu, hampir tidak mungkin untuk secara otomatis membuat deklarasi tipe berdasarkan JavaScript. Namun, Anda dapat mencoba melakukan ini menggunakan alat berikut:

  • Microsoft / dts-gen adalah alat resmi yang digunakan oleh Microsoft sebagai titik awal untuk membuat deklarasi tipe.
  • dtsmake adalah alat pengembangan yang menjanjikan untuk secara otomatis membuat deklarasi tipe berdasarkan file JS. Itu tergantung pada sistem analisis kode Tern , yang digunakan beberapa editor untuk menerapkan mekanisme pelengkapan otomatis saat memasukkan kode JS.

Sumber

Ringkasan


Kami berharap bahwa diskusi tentang pertanyaan-pertanyaan dalam materi ini akan membantu Anda untuk mengenal TypeScript dengan lebih baik, mungkin memperhatikan apa yang sebelumnya tidak Anda perhatikan, dan, jika Anda sedang mempersiapkan sebuah wawancara, akan meningkatkan peluang Anda untuk lulus dengan sukses.

Pembaca yang budiman! Pertanyaan apa yang akan Anda tanyakan pada pewawancara yang melamar pekerjaan yang membutuhkan pengetahuan TypeScript?


- Dan apa diskon untuk kode promo ini ?!
- Sepertinya 7%. Saya akan memeriksa apakah Anda mau ...
"Ya, kamu periksa." Menurut pendapat saya, diskonnya agak terlalu mahal!
...
- Maaf, saya sedikit salah tentang diskon. 10% di semua server virtual.

Source: https://habr.com/ru/post/id419993/


All Articles