TypeScript 面试题
对类型声明和类型检测的认识:
在 TypeScript 中,通过类型声明来指定变量的类型;指定类型后,当为变量赋值时,TS 编译器会自动进行类型检测,检查值是否符合指定的类型,符合则赋值,否则报错。
对类型推断的认识:
在声明一个变量时,如果有直接赋值,TypeScript 会根据值的类型推断出类型注解,这就是类型推断。
对类型断言的认识:
类型断言:可以用来手动指定一个值的类型。语法为 值 as 类型
或者 <类型> 值
。
TypeScript 有哪些基本类型:
TypeScript 中的基本类型有:字符串类型 string、数字类型 number、布尔类型 boolean、undefined、null、数组类型、对象类型、Symbol 类型、元组类型 tuple、任意类型 any、未知类型 unknown、空值类型 void、没有值类型 never、字面量类型 literal、内置对象。
TypeScript 还允许使用多种运算符,从现有类型中构建新的类型,例如联合类型和交叉类型。
any 类型和 unknown 类型的区别:
- 在 any 类型的变量上直接做任何事都是合法的。
- 在 unknown 类型的变量上直接做任何事都是非法的,必须要先进行类型缩小,经过校验,才能根据缩小之后的类型进行对应的操作。
void 空值和 never 没有值类型的区别:
- 空值通常用来指定一个函数没有返回值。
- 没有值通常用来指定一个函数的返回值永远不会有任何结果,例如:抛出异常、死循环等。实际业务开发中基本不会用到,开发框架或者工具的时候才有可能会用到(可能会用于做一定的校验)。
对接口的认识:
接口以 interface 开头,一般用于两种情况,一是对对象的形状进行描述,此时和类型声明类似;二是对类的一部分行为进行抽象,可以使用 implements 去实现一个接口,也就是说,接口中定义的所有属性和方法,类中都必须实现。
接口和类型别名的区别:
- Type 使用范围更广;interface 只能用来声明对象。
- Type 不允许两个相同名称的别名存在;interface 可以多次声明同一个接口名称,并且接口最终的定义是加起来的总和。
- Type 不支持继承,interface 支持继承。
对泛型的认识:
泛型:宽泛的类型,其实就是类型的参数化,让类型像参数一样,不预先指定,而是在使用的时候再让别人传入进来。
常见的内置工具:
Partial<Type>
:用于构造一个所有属性都为可选属性的类型。Required<Type>
:用于构造一个所有属性都为必选属性的类型。Readonly<Type>
:用于构造一个所有属性都只读的类型。ReturnType<Type>
:用于构造一个从函数类型中提取出来其返回值类型的类型。InstanceType<Type>
:用于构造一个从构造函数类型中提取出来其实例类型的类型。