TypeScript 相对于 JavaScript 的优势是什么
增加了静态类型,可以在开发人员编写脚本时检测错误,使得代码质量更好,更健壮。 优势:
- 杜绝手误导致的变量名写错;
- 类型可以一定程度上充当文档;
- IDE自动填充,自动联想;
readonly 和 Readonly
在一个接口里使用 readonly 来标记属性。 这有一个 Readonly 的映射类型,它接收一个泛型 T,用来把它的所有属性标记为只读类型
ts
class Foo {
readonly bar = 1; // OK
readonly baz: string;
constructor() {
this.baz = 'hello'; // OK
}
}
type Foo = {
bar: number;
bas: number;
};
type FooReadonly = Readonly<Foo>;
any、never、unknown、null & undefined 和 void 有什么区别?
- any: 动态的变量类型(失去了类型检查的作用)。
- never: 永不存在的值的类型。例如:never 类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型。
- unknown: 任何类型的值都可以赋给 unknown 类型,但是 unknown 类型的值只能赋给 unknown 本身和 any 类型。
- null & undefined: 默认情况下 null 和 undefined 是所有类型的子类型。 就是说你可以把 null 和 undefined 赋值给 number 类型的变量。当你指定了 --strictNullChecks 标记,null 和 undefined 只能赋值给 void 和它们各自。
- void: 没有任何类型。例如:一个函数如果没有返回值,那么返回值可以定义为void。
TypeScript 中 type 和 interface 的区别?
相同点:
- 都可以描述 '对象' 或者 '函数'
- 都允许拓展(extends) 不同点:
- type 可以声明基本类型,联合类型,元组
- type 可以使用 typeof 获取实例的类型进行赋值
- 多个相同的 interface 声明可以自动合并 使用 interface 描述‘数据结构’,使用 type 描述‘类型关系’
简述工具类型 Exclude、Omit、Merge、Intersection、Overwrite的作用。
- Exclude<T, U> 从 T 中排除出可分配给 U的元素。
- Omit<T, K> 的作用是忽略T中的某些属性。
- Merge<O1, O2> 是将两个对象的属性合并。
- Compute<A & B> 是将交叉类型合并
- Intersection<T, U>的作用是取T的属性,此属性同样也存在与U。
- Overwrite<T, U> 是用U的属性覆盖T的相同属性。