面试题答案
一键面试使用类型别名定义函数类型
type AddFunction = (a: number, b: number) => number;
使用接口定义函数类型
interface AddFunction {
(a: number, b: number): number;
}
语法差异
- 类型别名:使用
type
关键字,后跟别名名称,直接使用箭头函数的语法来定义函数类型。 - 接口:使用
interface
关键字,在接口内部使用函数签名的形式来定义函数类型,使用冒号:
分隔参数列表和返回值类型。
特性差异
- 合并:接口可以被合并,即多次定义相同名称的接口,其成员会被合并在一起。而类型别名不能被合并,如果重复定义相同名称的类型别名会报错。
- 实现:类可以实现接口,但不能实现类型别名。当需要明确表达某个类遵循特定的函数类型契约时,接口更合适。
- 类型保护:类型别名可以参与类型保护,通过类型谓词进行类型缩小。接口一般不直接用于类型保护场景。