2025年关于typescript面试题及其答案解析,万字长文,建议收藏..

1. TypeScript 是什么?

解析:TypeScript 是一种由微软开发的开源编程语言,是 JavaScript 的超集,增加了静态类型和其他语言特性。TypeScript 可以编译成纯 JavaScript。

2. TypeScript 的主要特性有哪些?

解析

  • 静态类型:允许在编译时检查类型。
  • 接口:定义对象的结构。
  • :支持面向对象编程。
  • 枚举:为一组相关的常量赋予名称。
  • 装饰器:用于元编程的特性。

3. 在 TypeScript 中,如何定义一个接口?

示例

interface Person {
   
    name: string;
    age: number;
}

4. TypeScript 中的类型推断是什么?

解析:类型推断是 TypeScript 自动推断变量类型的能力。编译器根据变量的初始值和上下文来推断类型。

5. TypeScript 中的联合类型是什么?

解析:联合类型允许一个变量可以是多种类型之一。

示例

let value: string | number;
value = "Hello";
value = 42;

6. 如何在 TypeScript 中定义一个类?

示例

class 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}`);
    }
}

7. TypeScript 中的类型别名是什么?

解析:类型别名用于给类型赋予一个新名称,可以用于基本类型、联合类型、元组等。

示例

type StringOrNumber = string | number;

8. TypeScript 中的枚举类型是什么?

解析:枚举是一种特殊的类型,用于定义一组命名常量。

示例

enum Color {
   
    Red,
    Green,
    Blue,
}

9. TypeScript 中的泛型是什么?

解析:泛型允许创建可重用的组件,能够在保留类型信息的同时支持多种数据类型。

示例

function identity<T>(arg: T): T {
   
    return arg;
}

10. 如何在 TypeScript 中使用装饰器?

解析:装饰器是用于修改类及其成员的特殊类型的声明。

示例

function Log(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
   
    const originalMethod = descriptor.value;
    descriptor.value = function(...args: any[]) {
   
        console.log(`Calling ${
     propertyKey} with`, args);
        return originalMethod.apply(this, args);
    };
}

11. TypeScript 中的抽象类是什么?

解析:抽象类是不能被实例化的类,用于定义子类的结构。

示例

abstract class Animal {
   
    abstract makeSound(): void;
}

class Dog extends Animal {
   
    makeSound() {
   
        console.log("Woof!");
    }
}

12. 如何在 TypeScript 中实现类型保护?

解析:类型保护用于在运行时检查变量的类型,以确保安全地访问其属性。

示例

function printId(id: number | string) {
   
    if (typeof id === "string") {
   
        console.log(`String ID: ${
     id}`);
    } else {
   
        console.log(`Number ID: ${
     id}`);
    }
}

13. TypeScript 中的交叉类型是什么?

解析:交叉类型允许将多个类型组合为一个类型,包含所有类型的属性。

示例

type Person = {
    name: string };
type Employee = {
    employeeId: number };
type EmployeeDetails = Person & Employee;

14. TypeScript 中如何处理可选属性?

解析:可选属性在接口或类中使用问号(?)表示。

示例

interface Person {
   
    name: string;
    age?: number; // 可选属性
}

15. 什么是 TypeScript 的声明文件(.d.ts)?

解析:声明文件用于为 JavaScript 代码提供类型信息,允许 TypeScript 检查类型并提供 IntelliSense。

16. TypeScript 中的 never 类型是什么?

解析never 类型表示一个永远不会出现的值,通常用于表示抛出异常或无限循环的函数返回值。

示例

function throwError(message: string): never {
   
    throw new Error(message);
}

17. TypeScript 中的 any 类型是什么?

解析any 类型表示可以是任何类型,关闭了类型检查,通常用于不确定类型的场景。

18. 如何在 TypeScript 中使用模块?

解析:可以使用 importexport 关键字来创建和使用模块。

示例

// math.ts
export function add(x: number, y: number): number {
   
    return x + y;
}

// app.ts
import {
    add } from './math';
console.log(add(2, 3));

19. TypeScript 中的函数重载是什么?

解析:函数重载允许为同一函数定义多个类型签名。

示例

function overload(x: string): string;
function overload(x: number): number;
function overload(x: any): any {
   
    return x;
}

20. 如何在 TypeScript 中处理 Promise?

解析:可以使用 Promise 类型进行异步操作,并使用 async/await 语法简化异步代码。

示例

async function fetchData(): Promise<string> {
   
    return "数据";
}

21. TypeScript 中如何处理异步编程?

解析:TypeScript 支持使用 Promiseasync/await 来处理异步操作。

示例

async function fetchData(): Promise<string> {
   
    const response = await fetch("https://api.example.com/data");
    const data = await response.json();
    return data;
}

22. 如何在 TypeScript 中实现类型声明合并?

解析:TypeScript 允许多个同名接口进行合并,合并后的接口包含所有属性。

示例

interface Person {
   
    name: string;
}

interface Person {
   
    age: number;
}

const john: Person = {
   
    name: "John",
    age: 25,
};

23. TypeScript 中的命名空间是什么?

解析:命名空间用于将相关的代码组织在一起,避免全局命名冲突。

示例

namespace Animals {
   
    export class Dog {
   
        bark() {
   
            console.log("Woof!");
        }
    }
}

24. 如何在 TypeScript 中使用类型守卫?

解析:类型守卫用于在运行时检查变量的类型,以确保安全地访问对象的属性。

示例

function isString(value: any): value is string {
   
    return typeof value === "string";
}

const value: any = "Hello";
if (isString(value)) {
   
    console.log(value.toUpperCase());
}

25. TypeScript 中的接口与类型别名有什么区别?

解析

  • 接口用于定义对象的结构,可以被实现和扩展。
  • 类型别名可以定义基本类型、联合类型和元组等,不能被扩展。

26. 如何在 TypeScript 中使用模块导入和导出?

解析:使用 export 导出模块中的变量或函数,使用 import 引入。

示例

// math.ts
export const PI = 3.14;
export function add(a: number, b: number): number {
   
    return a + b;
}

// app.ts
import {
    PI, add } from './math';
console.log(PI);
console.log(add(2, 3));

27. TypeScript 中的可选链操作符是什么?

解析:可选链操作符(?.)用于安全地访问嵌套对象的属性,如果中间的值为 nullundefined,则返回 undefined

示例

const obj = {
    a: {
    b: {
    c: 1 } } };
const value = obj.a?.b?.c; // 1

28. TypeScript 中的非空断言操作符是什么?

解析:非空断言操作符(!)用于告知 TypeScript 该值不会是 nullundefined

示例

let name: string | undefined;
name = "Alice";
console.log(name!); // 断言 name 不会是 undefined

29. 如何在 TypeScript 中实现接口的继承?

解析:接口可以通过 extends 关键字继承其他接口。

示例

interface Animal {
   
    name: string;
}

interface Dog extends Animal {
   
    bark(): void;
}

30. 解释 TypeScript 中的映射类型。

解析:映射类型允许通过已有类型创建新的类型。

示例

type Person = {
   
    name: string;
    age: number;
};

type ReadOnly<T> = {
   
    readonly [K in keyof T]: T[K];
};

type ReadOnlyPerson = ReadOnly<Person>;

31. TypeScript 中的字面量类型是什么?

解析:字面量类型用于指定变量可以是特定的值。

示例

let direction: "left" | "right";
direction = "left"; // 合法
// direction = "up"; // 不合法

32. 如何在 TypeScript 中实现函数重载?

解析:函数重载通过定义多个函数签名来实现。

示例

function combine(a: string, b: string): string;
function combine(a: number, b: number): number;
function combine(a: any, b: any): any {
   
    return a + b;
}

33. TypeScript 中如何使用 Promise 的泛型?

解析:可以在 Promise 中使用泛型来指定返回值的类型。

示例

function fetchData(): Promise<string> {
   
    return new Promise((resolve) => {
   
        resolve("数据");
    });
}

34. 如何在 TypeScript 中实现私有和保护属性?

解析:使用 privateprotected 关键字来定义类的私有和保护属性。

示例

class Person {
   
    private name: string;
    protected age: number;

    constructor(name: string, age: number) {
   
        this.name = name;
        this.age = age;
    }
}

35. 解释 TypeScript 中的 this 类型。

解析this 类型用于在类型中表示当前类的实例,通常用于链式调用。

示例

class Chainable {
   
    value: number;

    constructor(value: number) {
   
        this.value = value;
    }

    add(n: number): this {
   
        this.value += n;
        return this;
    }
}

const result = new Chainable(10).add(5).add(3).value; // 18

36. TypeScript 中的类型推断和类型注解的区别是什么?

解析

  • 类型推断:TypeScript 自动推断变量的类型。
  • 类型注解:手动为变量或函数指定类型。

37. 如何在 TypeScript 中处理类型不兼容?

解析:可以使用类型断言来处理类型不兼容的情况。

示例

let value: any = "Hello";
let strLength: number = (value as string).length;

38. TypeScript 中的函数参数默认值是什么?

解析:可以为函数参数设置默认值,如果调用函数时未提供该参数,则使用默认值。

示例

function greet(name: string = "World"): string {
   
    return `Hello, ${
     name}!`;
}

39. 解释 TypeScript 中的 Partial 类型。

解析Partial 类型用于将对象的所有属性变为可选。

示例

interface Person {
   
    name: string;
    age: number;
}

const updatePerson = (person: Person, updates: Partial<Person>) => {
   
    return {
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值