TypeScript の面接の質問

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-05 13:44:40207ブラウズ

TypeScript Interview Questions

質問 - TypeScript とは何ですか?

  • TypeScript は Javascript のスーパーセットです
  • 静的型を追加して、コード品質の向上と実行前のエラーチェックを可能にします。
  • インターフェイス、列挙型、ジェネリックなどの機能をサポートします。
  • より優れたエラーチェック、強化されたツール、改善されたコードの可読性を提供します。

質問 - 明示的および暗黙的な型の割り当てとは何ですか?

  • 明示的とは、型を書き出すことを意味します。以下のように -
let firstName: string = "Rutvik";
  • 暗黙的とは、TypeScript が値に基づいて型を推測することを意味します。以下の型は数値とみなされます
let age = 23;

質問 - TypeScript の any、unknown、never の違いは何ですか?

  • any の型は、任意の型の変数を割り当てるために使用されます。
  • 別の型を割り当て直してもエラーにはなりません。
let x: any = 10;
x = 'hello'; // No TypeScript error
console.log(x.toUpperCase()); // No TypeScript error
  • unknown 型は、値に対する操作を実行する前に型をチェックする必要があるため、any 型よりも優れています。
let y: unknown = 10;
// Type assertion needed before using y as number
if (typeof y === 'number') {
    console.log(y.toFixed(2));
}
  • 型は決して発生しない値を表すことはありません。
  • これは通常、正しく返されない関数の return ステートメントに使用されます。
function throwError(message: string): never {
    throw new Error(message);
}

質問 - 配列の型を指定するにはどうすればよいですか?

  • 配列を型指定するには、以下のように型を指定する必要があります。以下の例では、配列には文字列タイプのみを含めることができます。
const names: string[] = ["Rutvik", "Rohit", "Virat"];
names.push("Bumrah"); // no error
  • 配列の変更を防ぐ readonly キーワードを使用することもできます。
const names: readonly string[] = ["Rutvik", "Rohit", "Virat"];
names.push("Bumrah"); // Error: Property 'push' does not exist on type 'readonly string[]'.

質問 - 配列の型推論とは何ですか?

  • 配列に型を指定しない場合、配列は自動的に型を推測します。
const numbers = [1, 2, 3]; // inferred to type number[]
numbers.push(4); // no error

質問 - タプルとは何ですか?

  • これは、長さと型が事前定義された型配列です。
  • 異なる型の混合配列の型を与えるのに非常に便利です。
let ourTuple: [number, boolean, string];

// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];

質問 - 読み取り専用タプルとは何ですか?

  • タプルを読み取り専用にしない場合は、定義された項目にさらに項目を追加でき、TypeScript はエラーをスローしません。
let ourTuple: [number, boolean, string];

// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];
//No safety in indexes from 3
ourTuple.push('This is wrong');
  • ここで、これを修正するために、type の前にキーワード readonly を使用します。
let ourTuple: readonly [number, boolean, string];
// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];
// throws error as it is readonly
ourTuple.push('Coding Hero took a day off');

質問 - オブジェクトのタイプを指定するにはどうすればよいですか?

  • 別のオブジェクトのような構造を作成し、オブジェクト内のキーとキーのタイプを指定することで、オブジェクトのタイプを指定できます。
interface CarTypes {
    brand: string,
    model: string,
    year: number
}


const car: CarTypes = {
  brand: "Tata",
  model: "Punch",
  year: 2020
};

質問 - オブジェクトにオプションのプロパティを設定するにはどうすればよいですか?

  • オプションのプロパティまたはキーを指定するには、? を追加する必要があります。 t キーの後に。
let firstName: string = "Rutvik";

質問 - TypeScript の enum について説明してください。

  • 列挙型は定数である変数の一種です。その中の値のみを使用する必要があります。
  • 値はデフォルトでは数値であり、0 から始まり 1 ずつ増加します。
  • 数値または文字列ベースにすることができます
let age = 23;
let x: any = 10;
x = 'hello'; // No TypeScript error
console.log(x.toUpperCase()); // No TypeScript error

質問 - 型エイリアスとは何ですか?

  • カスタム名で型を定義でき、文字列や数値などのすべてのプリミティブ型だけでなく、オブジェクトや配列などの複合型にも使用できます。
let y: unknown = 10;
// Type assertion needed before using y as number
if (typeof y === 'number') {
    console.log(y.toFixed(2));
}

質問 - インターフェースとは何ですか?

  • インターフェイスは型に似ていますが、オブジェクトに対してのみ使用できます。
function throwError(message: string): never {
    throw new Error(message);
}

質問 - インターフェイスを拡張するにはどうすればよいですか?

  • インターフェイスは、extend キーワードを使用して拡張できます。
const names: string[] = ["Rutvik", "Rohit", "Virat"];
names.push("Bumrah"); // no error

質問 - Union タイプと Intersection タイプとは何ですか?

ユニオン:-

  • 共用体タイプは、プロパティが文字列や数値など、複数の値になる場合に使用されます。
  • このため、これらは OR とも呼ばれ、 | を使用して使用されます。シンボル。
const names: readonly string[] = ["Rutvik", "Rohit", "Virat"];
names.push("Bumrah"); // Error: Property 'push' does not exist on type 'readonly string[]'.

交差点:-

  • 交差タイプは、複数のタイプを 1 つに結合する場合に使用されます。
  • このため、AND とも呼ばれ、& 記号を使用して使用されます。
const numbers = [1, 2, 3]; // inferred to type number[]
numbers.push(4); // no error

質問 - Typescript の関数とは何ですか?

関数で戻り値の型を指定するにはどうすればよいですか?

  • 関数名の後に : 記号を付けると、関数の戻り値の型を指定できます。
let ourTuple: [number, boolean, string];

// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];

関数でパラメータの型を指定するにはどうすればよいですか?

  • 各パラメータの後に : 記号を使用してパラメータの種類を指定することができます。
let ourTuple: [number, boolean, string];

// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];
//No safety in indexes from 3
ourTuple.push('This is wrong');

関数にオプション、デフォルト、残りのパラメータを与えるにはどうすればよいですか?

  • デフォルトのパラメータを使用すると、パラメータをオプションとしてマークできます。このように、c はオプションであり、? で示されます。
let ourTuple: readonly [number, boolean, string];
// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];
// throws error as it is readonly
ourTuple.push('Coding Hero took a day off');
  • デフォルト値 (ES6 の機能) はタイプの後に続きます。
interface CarTypes {
    brand: string,
    model: string,
    year: number
}


const car: CarTypes = {
  brand: "Tata",
  model: "Punch",
  year: 2020
};
  • 残りのパラメータ (ES6 機能) は、渡された項目を配列に変換するため、配列の型が与えられます。
interface CarTypes {
    brand: string,
    model: string,
    year?: number
}

const car: CarTypes = {
  brand: "Tata",
  model: "Punch"
};

質問 - TypeScript のキャストとは何ですか?

  • キャストは、変数の型をオーバーライドするプロセスです。
  • 以下の例のように、型は不明ですが、as キーワードを使用すると文字列になります。
enum Direction {
  Up = 1,
  Down,
  Left,
  Right,
}
console.log(Direction.Up); // 1
console.log(Direction.Down); // 2
  • <> も使用できます。としての代わりに。どちらも同じ意味です。
let firstName: string = "Rutvik";

質問 - TypeScript のジェネリックとは何ですか?

  • Typeascript のジェネリックを使用すると、複数のデータ型を処理できる再利用可能なコンポーネントまたは命令を作成できます。
let age = 23;

質問 - Typescript のユーティリティ型?

  • TypeScript は、一般的な型変換を簡素化するユーティリティ型を提供します。
  • これらの型により、オブジェクトおよびインターフェイス型の操作と対話が容易になります。
  • 一般的に使用されるいくつかのユーティリティ タイプの内訳を次に示します。

1. 部分的

  • タイプ T のすべてのプロパティをオプションにします。
  • ユースケース: 一部のプロパティのみが必要なオブジェクトを作成する場合。
let x: any = 10;
x = 'hello'; // No TypeScript error
console.log(x.toUpperCase()); // No TypeScript error

2. 必須

  • タイプ T のすべてのプロパティを必須にします。
  • 使用例: すべてのプロパティが存在する必要があることを強制したい場合。
let y: unknown = 10;
// Type assertion needed before using y as number
if (typeof y === 'number') {
    console.log(y.toFixed(2));
}

3. 読み取り専用

  • タイプ T のすべてのプロパティを読み取り専用にします。
  • 使用例: オブジェクトのプロパティが変更できないようにするため。
function throwError(message: string): never {
    throw new Error(message);
}

4.ピック

  • 型 T からプロパティ K のセットを選択して型を作成します。
  • ユースケース: 型の特定のプロパティのみが必要な場合。
const names: string[] = ["Rutvik", "Rohit", "Virat"];
names.push("Bumrah"); // no error

5.省略

  • 型 T からプロパティ K のセットを省略して型を作成します。
  • ユースケース: 特定のプロパティを除くすべてのプロパティが必要な場合。
const names: readonly string[] = ["Rutvik", "Rohit", "Virat"];
names.push("Bumrah"); // Error: Property 'push' does not exist on type 'readonly string[]'.

6. 記録

  • キー K と型 T の値を使用して型を構築します。
  • 使用例: 固定キーと一​​貫した値タイプを持つオブジェクト タイプを作成します。
const numbers = [1, 2, 3]; // inferred to type number[]
numbers.push(4); // no error

7.除外する

  • U に割り当て可能なすべての型を型 T から除外します。
  • 使用例: 特定のタイプをフィルタリングして除外します。
let ourTuple: [number, boolean, string];

// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];

8. 抽出

  • 型 T から U に割り当て可能な型のみを抽出します。
  • 使用例: タイプを特定のサブセットに絞り込むため。
let ourTuple: [number, boolean, string];

// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];
//No safety in indexes from 3
ourTuple.push('This is wrong');

9.Null不可

  • 型 T から null と unknown を除外します。
  • 使用例: 値が null または未定義でないことを確認します。
let ourTuple: readonly [number, boolean, string];
// initialize correctly
ourTuple = [5, false, 'Coding Hero was here'];
// throws error as it is readonly
ourTuple.push('Coding Hero took a day off');

10. 戻り値の型

  • 関数型の戻り値の型を推論します。
  • 使用例: 関数の戻り値の型をキャプチャして使用します。
interface CarTypes {
    brand: string,
    model: string,
    year: number
}


const car: CarTypes = {
  brand: "Tata",
  model: "Punch",
  year: 2020
};

11. インスタンスタイプ

  • コンストラクター関数型 T のインスタンス型で構成される型を構築します。
  • 使用例: クラス インスタンスの型を取得します。
interface CarTypes {
    brand: string,
    model: string,
    year?: number
}

const car: CarTypes = {
  brand: "Tata",
  model: "Punch"
};

12. パラメータ

  • 関数型のパラメータの型を抽出します。
  • 使用例: 関数のパラメーターの型を再利用する。
enum Direction {
  Up = 1,
  Down,
  Left,
  Right,
}
console.log(Direction.Up); // 1
console.log(Direction.Down); // 2

以上がTypeScript の面接の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。