本文深入探讨了TypeScript大厂面试真题,涵盖了基础语法、类型系统及高级特性等知识点。文章详细解析了面试中常见的题型和解题方法,并提供了实战演练示例。此外,文中还分享了准备面试的策略和技巧,帮助读者全面掌握TypeScript大厂面试真题。
TypeScript 是一种由微软开发的开源编程语言,它是 JavaScript 的一个超集。TypeScript 的设计目标是通过可选的静态类型检查来提高生产力。以下是 TypeScript 中的一些基础概念:
在 TypeScript 中,所有变量都需要指定类型。变量类型可以是基本类型、引用类型或者函数类型。
number
:用于表示数值,支持整数和浮点数。string
:用于表示字符串。boolean
:用于表示布尔值。void
:表示没有返回值。null
和 undefined
:表示空值和未定义值。never
:表示函数永远不会返回,或者是一个永远不会完成的异步操作。let age: number = 25; let name: string = "Alice"; let isStudent: boolean = true; let result: void = undefined; let empty: null = null; let neverValue: never = (() => { throw new Error("This function never returns"); })();
any
:允许任何类型。unknown
:类似于 any
,但需要进行类型检查。object
:表示任意对象类型。let anyValue: any = 42; anyValue = "Hello, TypeScript!"; let unknownValue: unknown = 42; unknownValue = "Hello, TypeScript!"; let objectValue: object = {}; objectValue = { name: "Alice", age: 25 };
函数类型定义了传入参数的类型和返回值的类型。
function add(x: number, y: number): number { return x + y; } let multiply: (x: number, y: number) => number = (x, y) => x * y;
接口是一种描述对象结构的类型。它主要用于定义对象的形状,即对象的属性和方法。
interface Person { name: string; age: number; greet: () => void; } let alice: Person = { name: "Alice", age: 25, greet: () => { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } };
类是 TypeScript 中的对象构造器,它允许创建具有共同属性和方法的对象。
class Student { public name: string; private age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } getFullName(): string { return `${this.name} is ${this.age} years old.`; } } let alice: Student = new Student("Alice", 25); console.log(alice.getFullName()); // 输出 "Alice is 25 years old."
TypeScript 支持 ES6 模块系统,允许将代码组织成可重用的模块。
// math.ts export function add(x: number, y: number): number { return x + y; } // main.ts import { add } from './math'; console.log(add(10, 20)); // 输出 30
在大厂面试中,TypeScript 的题目通常会覆盖基础语法、类型检查和高级特性。以下是一些常见的题型:
以下是一些在大厂面试中常见的 TypeScript 题目及其解析:
function addNumbers(a: number, b: number): number { return a + b; } let result: number = addNumbers(5, 10); console.log(result); // 输出 15
interface Person { name: string; age: number; greet(): void; } class Student implements Person { name: string; age: number; constructor(name: string, age: number) { this.name = name; this.age = age; } greet() { console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`); } } let alice: Student = new Student("Alice", 25); alice.greet(); // 输出 "Hello, my name is Alice and I am 25 years old."
function sumArray(arr: number[]): number { return arr.reduce((acc, curr) => acc + curr, 0); } let numbers: number[] = [1, 2, 3, 4, 5]; let result: number = sumArray(numbers); console.log(result); // 输出 15
function mapArray<T, U>(arr: T[], func: (item: T) => U): U[] { return arr.map(func); } let numbers: number[] = [1, 2, 3, 4, 5]; let mappedNumbers: number[] = mapArray(numbers, x => x * 2); console.log(mappedNumbers); // 输出 [2, 4, 6, 8, 10]
准备 TypeScript 的面试,需要掌握基础语法、类型系统和高级特性。以下是一些具体的策略和技巧:
掌握基础的 TypeScript 语法和类型系统之后,可以进一步学习一些进阶知识点,帮助你在实际开发中更好地使用 TypeScript。
泛型是一种允许函数或类处理不同类型的能力。通过使用泛型,可以创建更通用的函数和类,从而提高代码的可重用性。
function identity<T>(arg: T): T { return arg; } let str: string = identity<string>("Hello"); let num: number = identity<number>(42);
装饰器是一种特殊类型的声明,可以被附加到类声明、方法、访问器、属性或参数。它们可以用来修改或增强类或成员的行为。
function readonly(target: any, name: string) { Object.defineProperty(target, name, { get() { return this._name; }, set() { throw new Error("Cannot set name"); } }); } class Person { @readonly _name: string; constructor(name: string) { this._name = name; } } let alice: Person = new Person("Alice"); console.log(alice._name); // 输出 "Alice" alice._name = "Bob"; // 抛出错误 "Cannot set name"
映射类型是一种元类型,可以用来创建新的类型,该类型是基于现有类型的属性映射而来的。
type ReadonlyKeys<T> = { [K in keyof T]: T[K] }; type User = { name: string; age: number; email: string }; type ReadonlyUser = ReadonlyKeys<User>; let readonlyUser: ReadonlyUser = { name: "Alice", age: 25, email: "alice@example.com" }; readonlyUser.name = "Bob"; // 抛出错误 "Cannot assign to 'name' because it is a read-only property"
在准备 TypeScript 的面试时,建议遵循以下步骤:
通过这些步骤,你可以更好地准备 TypeScript 的面试,并在实际开发中更好地使用 TypeScript。