TypeScript高频面试题
TypeScript有哪些基础类型
- number: 数字
- string: 字符串
- boolean: 布尔
- Symbol: es6的Symbol
- Array: 数组(数组的每一项都必须是同一个类型)
Tuple: 表示一个已知元素数量和类型的数组, 各元素的类型不必要相同
let tupleArr: [string, number] = ["hello", 1];
enum: 枚举类型是对JS标准数据类型的一个补充, 你可以规定一类数据结构为一个枚举类型 ```typescript enum Color { Red = “red”, Green = “green”, Blue = “blue” }
let color: Color; // 这个时候color就只允许被赋值为Color.Red, Color.Green, Color.Blue了
- object: 对象- never: 代表一个永远不存在的值的类型, 比如一个死循环的函数的返回值就是never- void: 代表没有返回类型- null & undefined- any: any代表任意类型都接受, 我们一般用它来跳过类型检查2. 什么是接口(interface)?- 接口帮助我们给我们代码或者第三方代码定义结构契约```typescriptinterface {name: string;age?: number; // 代表age可有可无readonly parent: Array<string> // 代表只读}interface SearchFunc {(source: string, subString: string): boolean;}
- 类可以实现接口 ```typescript interface ClockInterface { currentTime: Date; }
class Clock implements ClockInterface { currentTime: Date; // 当我们实现了接口以后, 我们的类里就必须要有接口的同名属性, 且必须是同类型 }
- 接口是可以被继承的```typescriptinterface Person {name: string;age: number}interface Man extends Person {wife: string}const man: Man; // man变量将必须存在name, age, wife三个属性
- 能说说TypeScript中三斜线指令吗?
- 主要用的最多的就是
<reference path="xxx">: 这个是用来告诉ts在编译过程中还需要引入哪些其他文件
- 主要用的最多的就是
- 有用过ts的装饰器吗?
- 装饰器是一种特殊类型的声明, 他能够被附加到类声明, 方法, 访问符或者属性, 参数上, 装饰器格式为
@expression的形式,expression必须是一个函数, 他会在运行时被调用, 被装饰的声明信息作为参数传入给该expression - 若要使用ts的装饰器, 我们需要在
tsconfig.json中启用experimetalDecorators为true - 在ts中装饰器会由下往上依次被调用
- 我们对属性进行装饰的时候有时候会用到
reflect-metadata库
- 装饰器是一种特殊类型的声明, 他能够被附加到类声明, 方法, 访问符或者属性, 参数上, 装饰器格式为
- 交叉类型和联合类型
- 交叉类型:
`A & B & C - 联合类型:
A | B | C
- 交叉类型:
- 你知道有哪些TS内置好的工具类型吗?
Partail<T>: 将传入类型的属性全部变为可选Readonly<T>: 将传入类型的属性全部变为只读Record<P, T>: 他会将P中的每个字段都读出来, 作为属性名, 然后类型都为T
```typescript interface animalInfo { name: string; age: string } type animals = “dog” | “cat”;
const animals: Record
- `Pick<P, T>`: 意思是从P中剃取T类型过来形成一个新的类型```typescriptinterface Man {name: string;age: number;wife: string}const person: Pick<Man, "name"| "age"> = {name: "alice",age: 18}
Omit<P, T>: 代表从P的类型声明中删除T
```javascript interface Man { name: string; age: number; wife: string }
const person: Omit
- `Exclude<T, U>`: 从T中剔除不可以赋值给U的类型(一般用于联合类型)```javascripttype Test = Exclude<"a" | "b", "b">; // Test类型就是"a"
Extract<T, U>: 从T中提取可以赋值给U的类型type Test = Extract<"a" | "b", "b">; // Test类型就是"b"
ReturnType<T>: 获取函数T类型的返回值类型InstanceType<T>: 获取构造函数类型的实例类型NonNullable<T>: 从T中剔除null和undefined类型的属性
