目次[隠す][見せる]
- 1. TypeScript とは正確には何ですか? JavaScript との違いは何ですか?
- 2. TypeScript の注目すべき機能は何ですか?
- 3. TypeScript を使用する利点は何ですか?
- 4. TypeScript を使用することの欠点は何ですか?
- 5. TypeScript のコンポーネントとは正確には何ですか?
- 6. TypeScript のインターフェースについて説明できますか?
- 7. TypeScript の変数とは何ですか? また、変数はさまざまな方法でどのように宣言されていますか?
- 8. インターフェイスのサブセットを使用して新しい型を生成するにはどうすればよいですか?
- 9. 「任意の」タイプとはどういう意味ですか? また、いつ使用する必要がありますか?
- 10. TypeScript は、静的に型付けされたオプションの構文を持つ言語である理由は何ですか?
- 11. TypeScript では、モジュールは何を意味しますか?
- 12. TypeScript では「enum」はどのように機能しますか?
- 13. 内部モジュールと外部モジュールの違いは何ですか?
- 14. TypeScript の匿名関数とは何を意味しますか?
- 15. TypeScript では、名前空間とは何ですか?どのように宣言しますか?
- 16. TypeScript はどのアクセス修飾子をサポートしていますか?
- 17. TypeScript は関数のオーバーロードを許可しますか?
- 18. TypeScript では、関数でオプションの引数をどのように使用できますか?
- 19. var、let、および const は互いにどのように異なりますか?
- 20. TypeScript で、デコレータについて説明しますか?
- 21. TypeScript では、Mixins は何を意味しますか?
- 22. TypeScript の型エイリアスとは正確には何ですか?
- 23. 「スコープ変数」という用語は何を意味しますか?
- 24. noImplicitAny は正確には何に使用されますか?
- 25. ユニオン タイプとインターセクション タイプは互いにどのように異なりますか?
- 26. TypeScript Declare キーワードをどのように定義しますか?
- 27. TypeScript では、ジェネリックとは何ですか?
- 28. TypeScript での JSX の意味は?
- 29. TypeScript アンビエントとは何ですか? また、いつ使用する必要がありますか?
- 30. TypeScript の抽象クラスとはどういう意味ですか?
- 31. TypeScript Map ファイルとは正確には何ですか?
- 32. TypeScript では、型アサーションとは何ですか?
- まとめ
Microsoft は、TypeScript プログラミング言語を開発し、引き続きサポートしています。 オプションとして静的型付けが追加された、JavaScript の構文上のスーパーセットです。
大規模アプリケーション開発言語 TypeScript は JavaScript をコンパイルします。 TypeScript は JavaScript のスーパーセットであるため、JavaScript で記述されたプログラムは TypeScript でも有効です。
以下は、最も典型的な TypeScript 開発者インタビューの質問と回答の包括的なリストです。
1. TypeScript とは正確には何ですか? JavaScript との違いは何ですか?
JavaScript のスーパーセットである TypeScript は、標準の JavaScript にコンパイルされます。 概念的な観点からは、TypeScript と JavaScript は SASS と CSS に似ています。
つまり、TypeScript は ES6 JavaScript にさらにいくつかの機能を追加したものです。 JavaScript は Python に近いスクリプト言語ですが、TypeScript は Java や C# に匹敵するオブジェクト指向の静的型付け言語です。
クラスとインターフェースはすべて TypeScript のオブジェクト指向設計の一部であり、型推論は静的型付けのおかげで利用できる多くのツールの XNUMX つです。
JavaScript は拡張子が .js のファイルに記述されますが、TypeScript は拡張子が .ts のファイルに記述されます。
JavaScript とは対照的に、TypeScript コードはブラウザーや他のプラットフォームで直接実行することはできず、ブラウザーによって理解されません。 次に、ターゲット プラットフォームは、TypeScript のトランスパイラーを使用して .ts ファイルから生成されたプレーンな JavaScript を実行します。
2. TypeScript の注目すべき機能は何ですか?
- 静的型付けは、コンパイル中の型チェックを支援する TypeScript の機能です。 そのため、スクリプトを実行しなくても、書きながらコードの間違いを検出できます。
- TypeScript を使用して DOM を変更し、項目を追加または削除できます。
- Windows、macOS、Linux などのオペレーティング システムには、TypeScript コンパイラをインストールできます。
- クラス、インターフェース、およびモジュールは、TypeScript によって提供される機能の一部です。 したがって、クライアント側とサーバー側の両方の開発用のオブジェクト指向コードを作成できます。
- クラス、インターフェイス、矢印関数など、ECMAScript 2015 (ES 6、7) の機能の大部分は既に TypeScript に含まれています。
- JavaScript の動的型付けを利用している場合、TypeScript はオプションの静的型付けもサポートします。
3. TypeScript を使用する利点は何ですか?
- TypeScript は速く、習得が容易で、実行速度が速いため、どの JavaScript エンジンまたはブラウザーでも TypeScript を実行できます。
- JavaScript と同じ構文とセマンティクスを共有します。
- これにより、バックエンド開発者がフロントエンド コードをより迅速に記述できるようになります。
- ES6 および ES7 の機能が組み込まれています。 JavaScriptの関数 Node.js のような ES5 エンジン。
- Jquery、D3.js などの既存の JavaScript ライブラリは、.d.ts 拡張子を持つ定義ファイルを介してサポートされます。
- 既に存在する JavaScript スクリプトは、TypeScript コードを呼び出すことができます。 また、現在の JavaScript フレームワークおよびライブラリとシームレスに統合します。
4. TypeScript を使用することの欠点は何ですか?
- TypeScript でコーディングするには、長いコンパイル プロセスが必要です。
- 抽象クラスはサポートしていません。
- タイプ定義ファイルの品質が問題です。
- サードパーティのライブラリを使用するには、定義ファイルが必要です。
- TypeScript アプリケーションをブラウザーで実行する場合は、TypeScript を JavaScript に変換するためのコンパイル手順が必要です。
- JavaScript は Web 開発者によって長年使用されており、TypeScript は新しいものを提供しません。
5. TypeScript のコンポーネントとは正確には何ですか?
TypeScript には、次の XNUMX つの主なコンポーネント カテゴリがあります。
- 言語設定: タイプ、キーワード、および構文の注釈が含まれています。
- TypeScript コンパイラ: TypeScript 命令は、このコンパイラ (tsc) によって JavaScript に変換されます。
- TypeScript 言語サービス: 言語サービスは、基本的なコンパイラ プロセスの上にある XNUMX 番目のレイヤーとして、エディターのようなアプリを提供します。 一般的な編集操作の標準セットは、言語サービスによってサポートされています。
6. TypeScript のインターフェースについて説明できますか?
TypeScript はインターフェイスを使用してエンティティの構文を指定します。 つまり、オブジェクトや項目の配列などのデータ形式は、インターフェイスを使用して記述できます。 インターフェイスの宣言には、インターフェイス キーワード、インターフェイス名、およびその定義が使用されます。 ユーザー オブジェクトの基本的なインターフェイスを調べてみましょう。
その後、インターフェイスを使用して変数の型を設定できます (プリミティブ型を変数に割り当てる方法と同様)。 インターフェイスのプロパティは、User タイプの変数によって満たされます。
TypeScript プロジェクトは、統一性を提供するため、インターフェースから恩恵を受けます。 さらに、インターフェイスは、IDE オートコンプリート機能を強化し、正しい値がコンストラクターとメソッドに提供されることを保証することで、プロジェクトのツールを強化します。
7. TypeScript の変数とは何ですか? また、変数はさまざまな方法でどのように宣言されていますか?
変数は、値を保持するために使用される特別に指定されたメモリ領域です。 TypeScript で変数を宣言する場合、コロン (:) は変数名の後に配置され、その後に型が続きます。 JavaScript と同様に、var キーワードを使用して変数を宣言します。
Typescript で変数を宣言する際には、特定のガイドラインに従う必要があります。
- 名前を数字で始めることはできません。
- 変数名には文字または数字を含める必要があります。
- このフィールドで使用できる特殊文字は、ドル記号 ($) とアンダースコア (_) だけです。
8. インターフェイスのサブセットを使用して新しい型を生成するにはどうすればよいですか?
既存の型またはインターフェイスを指定し、新しい型から除外するキーを選択することで、ユーティリティ type omit を使用して TypeScript で新しい型を作成できます。
次の例は、 User インターフェースに基づいているが email プロパティを除外した UserPreview という新しい型を構築する方法を示しています。
9. 「任意の」タイプとはどういう意味ですか? また、いつ使用する必要がありますか?
変数に値を保存する必要がある場合がありますが、事前に変数の型が不明です。 値は、たとえば、ユーザー入力または API 要求から発生する可能性があります。 「any」型を使用して、変数型に任意の型の値を与えることができます。
変数の型が明示的に指定されておらず、コンパイラがコンテキストからそれを判断できない場合、TypeScript は変数の型が any であると認識します。
10. TypeScript は、静的に型付けされたオプションの構文を持つ言語である理由は何ですか?
オプションで静的に型指定されるため、TypeScript の変数の型を無視するようにコンパイラに指示することができます。 任意のデータ型を使用して、変数に任意の種類の値を割り当てることができます。 コンパイル時に、TypeScript はエラー チェックを提供しません。
11. TypeScript では、モジュールは何を意味しますか?
関連する変数、関数、クラス、インターフェースなどをモジュールでグループ化すると効果的です。 使用できますが、グローバル スコープでは使用できず、独自のスコープ内でのみ使用できます。
基本的に、モジュールの定義済みの変数、関数、クラス、およびインターフェイスは、モジュールの外部から直接アクセスすることはできません。
export キーワードを使用してモジュールを構築できますが、 import キーワードを使用してモジュールを別のモジュールに含めることができます。
12. TypeScript では「enum」はどのように機能しますか?
名前付き定数のコレクションを定義する方法は、列挙型または列挙型を使用することです。 これらのデータ構造には、固定長と固定値のコレクションがあります。
TypeScript で特定の値の選択肢のコレクションを表す場合、キーと値のペアのセットを使用して可能性を記述するために列挙型がよく使用されます。
さまざまな種類のユーザーを提供するために使用される列挙型の図を見てみましょう。
列挙型は、コンパイル後に TypeScript によって内部的に通常の JavaScript オブジェクトに変換されます。 したがって、列挙型の使用は、いくつかの個別の const 変数を使用するよりも望ましい方法です。
列挙型が提供するグループ化により、コードはタイプセーフで理解しやすくなります。
13. 内部モジュールと外部モジュールの違いは何ですか?
内部モジュール:
- 内部モジュールは、Typescript の以前のイテレーションの機能でした。
- 内部モジュールの名前と本体は、ModuleDeclarations を使用して定義されます。
- これらは、ローカルまたはエクスポートされた他のモジュールのメンバーです。
- クラス、インターフェイス、関数、変数は内部モジュールにグループ化され、別のモジュールにエクスポートできます。
外部モジュール:
- 最新バージョンでは、外部モジュールはモジュールと呼ばれます。
- 外部モジュールと呼ばれる個別のソース ファイルを使用してそれらを作成し、それぞれに少なくとも XNUMX つのインポートまたはエクスポート宣言が含まれます。
- 最新バージョンでは、外部モジュールはモジュールと呼ばれます。
- モジュール定義の内部ステートメントは、外部モジュールを使用して非表示にすることができ、定義された変数に接続されているメソッドと引数だけが表示されます。
14. TypeScript の匿名関数とは何を意味しますか?
匿名として分類された関数には、識別子としての関数名がありません。 これらのルーチンは、実行時に動的に定義されます。 通常の関数と同様に、無名関数は入力を受け取り、結果を生成できます。
通常、無名関数は一度作成されると到達できなくなります。 変数は無名関数に割り当てることができます。
15. TypeScript では、名前空間とは何ですか?どのように宣言しますか?
名前空間は機能を論理的にグループ化します。 これらは typescript のレガシー コードを内部的に保持します。 それは、特定のつながりを持つ特性やものを含みます。
名前空間の別名は内部モジュールです。 インターフェイス、クラス、関数、および変数をすべて名前空間に含めて、接続された機能のコレクションを提供できます。
16. TypeScript はどのアクセス修飾子をサポートしていますか?
TypeScript の public、private、および protected アクセス修飾子を使用して、クラス メンバーのアクセシビリティを制御する方法の例を次に示します。
- Public – クラスのすべてのメンバー、そのすべての子孫クラス、およびクラスのすべてのインスタンスがアクセスできます。
- 保護 – クラスのすべてのメンバーとそのすべてのサブクラスからアクセスできます。 ただし、クラス インスタンスはアクセスできません。
- それらへのプライベートアクセスは、クラスメンバーのみに制限されています。
JavaScript は便利なので、アクセス修飾子が与えられていない場合は public と見なされます。
17. TypeScript は関数のオーバーロードを許可しますか?
はい、関数のオーバーロードは TypeScript でサポートされています。 しかし、今それが行われているのは奇妙です。 したがって、TypeScript でオーバーロードする場合、さまざまなシグネチャを持つ実装は XNUMX つだけです。
XNUMX 番目の署名には text 型のパラメーターが含まれていますが、最初の署名には number 型のパラメーターが XNUMX つしかありません。 any 型の引数を含む XNUMX 番目の関数には、実際の実装が含まれています。
次に、実装は提供されたパラメーターのタイプを判別し、その判別に従ってコードの別のセクションを実行します。
18. TypeScript では、関数でオプションの引数をどのように使用できますか?
JavaScript とは対照的に、関数シグネチャに記載されている正確な量と種類のパラメーターを指定せずに関数を呼び出そうとすると、TypeScript コンパイラーはエラーを発生させます。
この問題を回避するには、疑問符記号 ('?') を使用してオプションのパラメーターを使用できます。 「?」を追加することで、オプションのパラメータを表すことができることを示しています。 価値を受け取るかもしれないし、受け取らないかもしれない人に。
19. var、let、および const は互いにどのように異なりますか?
変数を宣言する XNUMX つの異なる方法が TypeScript によって提供され、それぞれに推奨されるアプリケーションがあります。
VAR: JavaScript の var 変数の動作とスコープのガイドラインに従って、グローバル変数または関数スコープの変数を宣言します。 変数は、宣言時に値を設定する必要はありません。
させて: ローカル スコープのブロック変数を宣言します。 変数は、宣言時に変数の値を設定する必要はありません。 「ブロック スコープのローカル変数」という用語は、関数、if/else ブロック、またはループなど、含まれているブロック内からのみアクセスできる変数を指します。 Let 変数は、var とは対照的に、宣言する前に読み書きすることはできません。
定数: 初期化後に変更できないブロック スコープの定数の値を宣言します。 const 変数は、宣言する前に初期化する必要があります。 変数が存在している間ずっと一定である場合、これが最適です。
20. TypeScript で、デコレータについて説明しますか?
アクセサー、プロパティ、パラメーター、クラス、関数、またはデコレーターはすべて、特定の方法でデコレーターとして宣言できます。 デコレータは、装飾された宣言に関する詳細とともに実行時に呼び出される @expression プレフィックスを持つ関数です。
デコレータが機能するには、式で関数を評価する必要があります。
TypeScript デコレータは、注釈と情報を現在のコードに宣言的に追加するという目標を提供します。
tsconfig.json ファイルまたはコマンド ラインで、実験的なデコレータのサポートを有効にするために、experimentalDecorators コンパイラ オプションを有効にする必要があります。
21. TypeScript では、Mixins は何を意味しますか?
ミックスインは、Javascript の再利用可能な部分からクラスを作成し、部分クラスを混合してより複雑な完全なクラスを作成する手法です。
概念は簡単です。関数 B はクラス A を受け入れ、その機能を取得するためにクラス B を拡張するクラス A とは対照的に、その機能が追加された新しいクラスを返します。 この場合の関数 B は mixin です。
22. TypeScript の型エイリアスとは正確には何ですか?
型エイリアスは、型の名前を変更します。 型エイリアスは、インターフェイスと同様に、プリミティブ、共用体、タプル、および手動で定義する必要があるその他の型に名前を付けるために使用できます。
エイリアシングは新しいタイプを作成しません。 むしろ、既存の型の名前を変更します。 プリミティブのエイリアスは実際には実用的ではありませんが、ドキュメントには役立ちます。
型エイリアスは、インターフェイスと同様にユニバーサルにすることができます。 必要なのは、型パラメーターを追加して、エイリアス宣言の右側で使用することだけです。
23. 「スコープ変数」という用語は何を意味しますか?
JavaScript は、ローカル スコープ変数とグローバル スコープ変数の両方をサポートしています。 スコープは、オブジェクト、変数、および関数のコレクションです。
XNUMX つのスコープで変数を宣言する例は次のとおりです。
- ローカル スコープを持つ変数 – 関数内で使用するための関数オブジェクトとして機能します。
- グローバル スコープの変数 – このウィンドウ オブジェクトは、関数の内外で使用できます。
24. noImplicitAny は正確には何に使用されますか?
プロジェクトの暗黙の any 型に対する TypeScript コンパイラの処理は、TypeScript プロジェクトの tsconfig.json 構成ファイルの noImplicitAny プロパティによって変更されます。
noImplicitAny フラグは true または false に設定でき、初期化後は常に変更可能です。 すべてのプロジェクトが一意であることを考えると、この数値がどうあるべきかについて正しい答えも間違った答えもありません。
フラグのオン状態とオフ状態の違いを理解すると、フラグに使用する設定を選択するのに役立ちます。
noImplicitAny フラグが false (デフォルト) に設定されている場合、コンパイラは変数の使用方法に基づいて変数の型を決定しません。 代わりに、型はコンパイラによってデフォルトで any に設定されます。
ただし、noImplicitAny オプションが true に設定されている場合、コンパイラは型を推測しようとしますが、それができない場合はコンパイル時エラーが発生します。
25. ユニオン タイプとインターセクション タイプは互いにどのように異なりますか?
新しい種類を最初から生成する代わりに、共用体と交差型を使用すると、既存の型を構成して混合できます。 ユニオンとインターセクションはどちらも、特定のユースケースに最適な独特の性質を持っています。
いくつかの種類のうちの XNUMX つになることができる型は、共用体型と呼ばれます。 新しいタイプで使用されるタイプのリストは、| を使用して分割されます。 (縦棒) ユニオンタイプの記号。
例を見てみましょう:
一方、交差は、多くのタイプを XNUMX つにマージし、各タイプのすべての機能を統合して新しいタイプを形成するタイプとして定義されます。 マージされる種類のリストは、& 記号を使用して交点に分割されます。
例を見てみましょう:
26. TypeScript Declare キーワードをどのように定義しますか?
JavaScript ライブラリまたはフレームワークには TypeScript 宣言ファイルはありません。 ただし、コンパイル エラーが発生することなく TypeScript ファイルでそれらを使用するには、declare キーワードを使用する必要があります。
別の場所に既に存在する可能性のある変数を指定する場合は、アンビエント宣言とメソッドで declare キーワードを使用します。
27. TypeScript では、ジェネリックとは何ですか?
TypeScript Generics と呼ばれるツールは、再利用可能なパーツを作成する方法を提供します。 XNUMX つの形式のデータのみを操作する代わりに、さまざまなデータ型を操作できるコンポーネントを開発できます。
さらに、効率や生産性を犠牲にすることなく型安全性を提供します。 ジェネリックのおかげで、ジェネリック クラス、ジェネリック関数、ジェネリック メソッド、およびジェネリック インターフェイスを構築できます。
ジェネリックは、型パラメーターが開き () ブラケットと閉じ (>) ブラケットの間に記述されるため、高度に型指定されたコレクションです。 型を表す T と呼ばれるユニークな種類の型変数を利用します。
28. TypeScript での JSX の意味は?
JSX は、埋め込み可能な XML に似た構文から変換できる正当な JavaScript です。 React フレームワークとともに、JSX が人気を博しました。
TypeScript では、JSX の直接コンパイル、型検証、および JavaScript への埋め込みがサポートされています。 ファイルに a.tsx 拡張子を付け、使用する場合は JSX オプションを有効にする必要があります。
29. TypeScript アンビエントとは何ですか? また、いつ使用する必要がありますか?
コンパイラは、アンビエント宣言を通じて、別の場所にある実際のソース コードについて通知されます。
実行時にこれらのソース コードを利用しようとしても、存在しない場合、事前の通知なく機能しなくなります。 ドキュメントのようなファイルは、アンビエント宣言ファイルです。
ソースが変更された場合、ドキュメントを更新する必要があり、アンビエント宣言ファイルが変更されていない場合、コンパイラの問題が発生します。
さらに、jQuery、AngularJS、NodeJS など、すでに広く使用されている有名な JavaScript ライブラリを活用できます。
30. TypeScript の抽象クラスとはどういう意味ですか?
抽象クラスは、オブジェクトの直接インスタンス化を許可せずに、オブジェクトのコントラクトを定義します。 ただし、抽象クラスは、そのメンバーの実装情報を提供することもできます。
抽象クラスには、XNUMX つ以上の抽象メンバーがあります。 スーパークラスの抽象メンバーには、抽象クラスを拡張するクラスによって提供される実装が必要です。
抽象クラスの TypeScript の例と、別のクラスがそれを拡張する方法を見てみましょう。 以下の例の Car クラスと Bike クラスは両方とも Vehicle クラスを拡張していますが、それぞれ独自の方法で drive() 関数を実装しています。
31. TypeScript Map ファイルとは正確には何ですか?
TypeScript マップ ファイルと呼ばれるソース マップ ファイルには、元のファイルに関するデータが含まれています。 ソース マップ ファイル (.map ファイル) を使用すると、ツールは、出力される JavaScript コードとそれを生成した TypeScript ソース ファイルとの間をマッピングできます。
さらに、これらのファイルはデバッガーで使用できるため、JavaScript ファイルではなく TypeScript ファイルをデバッグできます。
32. TypeScript では、型アサーションとは何ですか?
型アサーションは、C# や Java などの他の言語の型キャストと同様に機能しますが、型の検証やデータの再配置は実行しません。
型アサーションは実行時に影響しませんが、型キャストはこのサポートを提供します。 一方、型アサーションはコンパイラによってのみ利用され、コードをどのように検査するかについてのガイダンスを提供します。
まとめ
結論として、これらの TypeScript 面接の質問が、あなたが就職面接の準備をしている開発者であろうと、最高の応募者を見つけようとしている採用マネージャーであろうと、あなたにとって役立つことを願っています.
採用プロセスには、技術的な専門知識以上のものが含まれることを忘れないでください。 確実に仕事に就く (または適切な応募者を見つける) ためには、過去の経験とソフト スキルが等しく重要です。
TypeScript の面接の質問の多くは自由回答式であり、正解は XNUMX つではありません。そのことを覚えておいてください。
インタビュアーは、あなたの回答の背後にある理論的根拠に関心があります。
どのようにして回答に到達したかを説明するフォローアップの質問に常に備えておいてください。 あなたの思考過程を説明してください。
コメントを残す