【面接の必需品】ommon TypeScript 面接の質問

github: https://github.com/Jessie-jzn
ウェブサイト:https://www.jessieontheroad.com/
1. TypeScript を使用する理由
1.静的型チェック
TypeScript の主な利点は静的型チェックであり、実行時ではなくコンパイル段階で一般的なエラーを検出するのに役立ちます。これにより、コードの信頼性と安定性が向上します。
2.強化されたコード編集エクスペリエンス
TypeScript の型システムにより、エディターでのより正確なコード補完、リファクタリング、ナビゲーション、ドキュメント機能が可能になり、開発効率が大幅に向上します。
3.コードの保守性の向上
型宣言により、コードの意図と構造を理解しやすくなり、チーム開発環境では特に有益です。
4.高度な言語機能
TypeScript は、インターフェイス、列挙型、ジェネリックなど、JavaScript には存在しない高度な機能をサポートしており、より構造化されたスケーラブルなコードの開発を容易にします。
5.より良いツールサポート
TypeScript は、生成された JavaScript コードを最適化するためのさまざまなコンパイラ オプションを提供し、TypeScript を互換性のある JavaScript にコンパイルすることでさまざまな JS 環境をサポートします。
2. TypeScript と JavaScript
| TypeScript | JavaScript | |
|---|---|---|
| Type System | Static typing with compile-time type checks. Types can be specified for variables, function parameters, and return values. | Dynamic typing with runtime type checks, which can lead to type-related runtime errors. |
| Type Annotations | Supports type annotations to explicitly define types. E.g., let name: string = "Alice"; | No type annotations. Types are determined at runtime. |
| Compilation | Requires compilation to JavaScript. TypeScript compiler checks for type errors and generates equivalent JavaScript code. | Runs directly in browsers or Node.js without a compilation step. |
| Object-Oriented Programming | Richer OOP features such as classes, interfaces, abstract classes, and access modifiers. | Basic OOP features with prototype-based inheritance. |
| Advanced Features | Includes all ES6 and ES7 features, plus additional features like generics, enums, and decorators. | Supports ES6 and later standards, but lacks some of the advanced features provided by TypeScript. |
3. TypeScript의 기본 데이터 유형
- 부울: 참 또는 거짓 값을 나타냅니다.
- 숫자: 정수와 부동소수점 숫자를 모두 나타냅니다.
- 문자열: 작은따옴표나 큰따옴표를 사용하여 텍스트 데이터를 나타냅니다.
-
Array: type[] 또는 Array
을 사용하여 지정된 유형의 값 컬렉션을 나타냅니다. - 튜플: 지정된 유형의 고정된 수의 요소로 구성된 배열을 나타냅니다.
- Enum: 명명된 상수 집합을 나타냅니다.
- 모두: 모든 유형의 값을 나타냅니다. 유형 검사를 제공하지 않습니다.
- Void: 값이 없음을 나타내며, 값을 반환하지 않는 함수의 반환형으로 흔히 사용됩니다.
- Null 및 정의되지 않음: 각각 값이 없음과 초기화되지 않은 상태를 나타냅니다.
- Never: 오류가 발생하거나 무기한 실행되는 함수와 같이 절대 발생하지 않는 값을 나타냅니다.
- 객체: 기본이 아닌 유형을 나타냅니다.
4. TypeScript의 제네릭이란 무엇입니까? 어떻게 사용되나요?
제네릭을 사용하면 유형 안전성을 유지하면서 함수, 클래스 및 인터페이스가 모든 유형에서 작동할 수 있습니다.
예:
function identity<T>(arg: T): T {
return arg;
}
const numberIdentity = identity<number>(42);
const stringIdentity = identity<string>("Hello");
이 예에서 ID 함수는 일반
5. Unknown과 TypeScript의 Any의 차이점
- 모든 유형: 모든 유형의 값을 나타내며 모든 유형 검사를 우회합니다. 유형 확인 없이 임의의 값을 할당할 수 있습니다.
- 알 수 없는 유형: 알 수 없는 유형을 나타냅니다. 알 수 없는 유형의 값은 사용하기 전에 확인해야 하며, 이는 유형이 불확실한 값을 처리하는 더 안전한 방법을 제공합니다.
let anyVar: any;
let unknownVar: unknown;
anyVar = 5;
anyVar.toUpperCase(); // No compile-time error, but might cause runtime error
unknownVar = "Hello";
if (typeof unknownVar === "string") {
unknownVar.toUpperCase(); // Type check ensures safety
}
6. readonly 수식어와 const 키워드의 차이점
- 읽기 전용 수정자: 초기화 후 객체 속성을 변경할 수 없도록 만들기 위해 객체 속성에 사용됩니다.
- const 키워드: 불변 참조로 변수를 선언하는 데 사용됩니다. 개체의 속성은 계속 수정할 수 있습니다.
const obj = { name: "John" };
obj.name = "Doe"; // Allowed
interface User {
readonly id: number;
name: string;
}
const user: User = { id: 1, name: "John" };
user.name = "Doe"; // Allowed
user.id = 2; // Error, `id` is readonly
7. TypeScript의 데코레이터
데코레이터는 메타데이터를 추가하거나 클래스, 메소드, 속성 또는 매개변수를 수정할 수 있는 특수 TypeScript 기능입니다.
유형:
- 클래스 데코레이터: 클래스 동작을 수정하거나 메타데이터를 추가하기 위해 클래스 생성자에 적용됩니다.
- 메소드 데코레이터: 동작을 변경하거나 메타데이터를 추가하는 메소드에 적용됩니다.
- 접속자 데코레이터: 접근자의 동작을 수정하기 위해 접근자를 가져오거나 설정하는 데 적용됩니다.
- 속성 데코레이터: 메타데이터를 추가하거나 해당 동작을 수정하기 위해 클래스 속성에 적용됩니다.
- 매개변수 데코레이터: 메타데이터를 추가하기 위해 메소드 매개변수에 적용됩니다.
예:
- 클래스 데코레이터:
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return `Hello, ${this.greeting}`;
}
}
- 메서드 데코레이터:
function logMethod(target: any, propertyName: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Method ${propertyName} called with args: ${JSON.stringify(args)}`);
return originalMethod.apply(this, args);
};
}
class Calculator {
@logMethod
add(a: number, b: number): number {
return a + b;
}
}
사용법:
데코레이터는 tsconfig.json에서 ExperimentDecorators를 true로 설정하여 활성화됩니다.
8. 인터페이스와 타입의 차이점
interface 및 type은 모두 객체 유형을 정의하는 데 사용되지만 몇 가지 차이점이 있습니다.
| interface | type | |
|---|---|---|
| Basic Usage | Defines the shape of objects, including properties and methods. | Defines primitive types, object types, union types, intersection types, etc. |
| Extension | Supports declaration merging. Multiple declarations of the same interface are automatically merged. | Does not support declaration merging. |
| Union and Intersection Types | Not supported. | Supports union (` |
| Primitive Type Aliases | Not supported. | Supports aliasing primitive types. |
| Mapped Types | Not supported. | Supports mapped types. |
| Class Implementation | Supports class implementation using implements. | Does not support direct class implementation. |
입력
以上が【面接の必需品】ommon TypeScript 面接の質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
ホットAIツール
Undress AI Tool
脱衣画像を無料で
Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ
AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。
Clothoff.io
AI衣類リムーバー
Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。
人気の記事
ホットツール
メモ帳++7.3.1
使いやすく無料のコードエディター
SublimeText3 中国語版
中国語版、とても使いやすい
ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
ドリームウィーバー CS6
ビジュアル Web 開発ツール
SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)
TypeScriptの高度な条件付きタイプ
Aug 04, 2025 am 06:32 AM
TypeScriptの高度な条件タイプは、TextEndsu?X:Y Syntaxを介してタイプ間の論理的判断を実装します。そのコア機能は、分散条件タイプ、推測タイプの推論、および複雑なタイプのツールの構築に反映されます。 1.条件付きタイプは、裸の型パラメーターに分散され、string [] | number []を取得するためにtoArrayなどのジョイントタイプを自動的に分割できます。 2.分布を使用してフィルタリングおよび抽出ツールを構築します。除外textendsuを除く除外:t、抽出抽出抽出extract textendsu?t:never、およびnullable filters null/undefined。 3
マイクロフロントエンドアーキテクチャ:実用的な実装ガイド
Aug 02, 2025 am 08:01 AM
MicrofRontendsSolvessCallingChallengesimSimSimSimsByEnablingEndependDevelymentAndDeployment.1)chooseanintegrations trategy:usemodulefederationinwebpack5forruntimeloadingindingindrueindopendence、build-time-integrationforsimplestups、oriframes/webcomponents
JavaScriptで配列の長さを見つける方法は?
Jul 26, 2025 am 07:52 AM
JavaScriptアレイの長さを取得するには、組み込みの長さプロパティを使用できます。 1. .length属性を使用して、constfruits = ['apple'、 'banana'、 'orange']; console.log(fruits.length); // output:3;など、配列内の要素の数を返します。 2.この属性は、文字列、数字、オブジェクト、または配列などのあらゆるタイプのデータを含む配列に適しています。 3.長さの属性は自動的に更新され、要素が追加または削除されると、その値はそれに応じて変更されます。 4.ゼロベースのカウントを返し、空の配列の長さは0です。 5.長さの属性は、手動で変更して配列を切り捨てたり拡張したりすることができます。
javascriptのvar、let、constの違いは何ですか?
Aug 02, 2025 pm 01:30 PM
varisfunction-scoped、canbereasSigned、hoisted witHedededined、andattachedtotheglobalwindow object;
JavaScriptのプロキシを理解し、APIを反映します
Jul 26, 2025 am 07:55 AM
プロキシと反射APIは、JavaScriptでオブジェクト操作を傍受およびカスタマイズするために使用される強力なツールです。 1。ターゲットオブジェクトのラップと「トラップ」を定義することにより、GETなどの操作をブロックし、ログ、検証、読み取り専用コントロールなどの関数を実装します。 2。反射は、デフォルトの動作の一貫性と正しさを確保し、コードメンテナビリティを改善するために、プロキシトラップに対応するメソッドを提供します。 3.実際のアプリケーションには、VUE3レスポンシブシステム、データ検証、デバッグログ、不変のオブジェクト、APIシミュレーションが含まれます。 4.パフォーマンスオーバーヘッド、組み込みのオブジェクトの複雑な動作、この結合の問題、およびネストされたオブジェクトを再帰的にプロキシ化する必要があります。 5.合理的な使用は、効率的でデバッグ可能で、リアクティブに構築できます
解決されたダブルチョコレートパズルを生成:データ構造とアルゴリズムのガイド
Aug 05, 2025 am 08:30 AM
この記事では、ダブルチョコパズルゲーム用の溶媒があるパズルを自動的に生成する方法を詳細に説明します。効率的なデータ構造 - 境界情報、色、状態を含む2Dグリッドに基づくセルオブジェクトを紹介します。これに基づいて、再帰的なブロック認識アルゴリズム(深さfirst検索と同様)と、それを反復パズル生成プロセスに統合する方法について詳しく説明し、生成されたパズルがゲームのルールを満たし、溶媒があることを確認します。この記事では、サンプルコードを提供し、生成プロセスにおける重要な考慮事項と最適化戦略について説明します。
JSのオプションチェーン(?。)とは何ですか?
Aug 01, 2025 am 06:18 AM
optionalchaining(?。)indavascriptsafelyAccessededpropertiesbyReturningifinedifineparturypart ofthechainisnullorundeded、dietlowssafeacesteplynestededededededededobjectproperties、suchasuser.profile?
JavaScriptを使用してDOM要素からCSSクラスを削除するにはどうすればよいですか?
Aug 05, 2025 pm 12:51 PM
JavaScriptを使用してDOM要素からCSSクラスを削除するための最も一般的で推奨される方法は、クラスリストプロパティのremove()メソッドを使用しています。 1。要素を使用して、単一または複数のクラスを安全に削除するには、クラスが存在しなくてもエラーは報告されません。 2.代替方法は、クラス名プロパティを直接操作し、文字列交換でクラスを削除することですが、定期的なマッチングまたは不適切な空間処理のために問題を引き起こすのは簡単であるため、推奨されません。 3.最初にクラスが存在するかどうかを判断してから、element.classlist.contains()を介して削除できますが、通常は必要ありません。 4.クラスリスト


