高级类型
1 交叉类型
交叉类型是将 多个类型合并为一个类型, 也就是 几种类型之和;
它把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性
交叉类型2 联合类型
联合类型表示一个值可以是 几种类型之一,用竖线( | )分隔每个类型;
联合类型 联合类型如果一个值是联合类型,我们 只能 访问此联合类型的所有类型里 共有的成员。
只能 访问 共有的成员3 类型保护
类型保护就是一些表达式,它们会在运行时检查以确保在某个作用域里的类型。
类型谓词
类型谓词pet is Fish 就是类型谓词。 谓词为 parameterName is Type 这种形式, parameterName 必须是来自于当前函数签名里的一个参数名。
typeof 类型保护
这些* typeof 类型保护*只有两种形式能被识别: typeof v === "typename"和 typeof v !== "typename", "typename" 必须是 "number", "string", "boolean" 或 "symbol"。 但是TypeScript并不会阻止你与其它字符串比较,语言不会把那些表达式识别为类型保护。
instanceof 类型保护
instanceof 类型保护可以为null的类型
类型检查器认为 null 与 undefined 可以赋值给任何类型;
null 和 undefined 是 所有类型的子类型。 就是说可以把 null 和 undefined 赋值给 任何类型的变量。
由于可以为 null 的类型是通过联合类型实现,那么你需要使用类型保护来去除 null;
类型保护如果编译器不能够去除 null 或 undefined,可以使用类型断言手动去除。 语法是添加 !后缀: identifier! 从 identifier 的类型里去除了 null和 undefined, 可以手动保证它不是 null 或者 undefined。
类型断言字符串字面量类型
字符串字面量类型允许你指定字符串必须的 固定值。 在实际应用中,字符串字面量类型可以与联合类型,类型保护和 类型别名 很好的配合。 通过结合使用这些特性,你可以实现 类似枚举类型的字符串。
字符串字面量类型索引类型
索引类型查询操作符 keyof
索引类型查询操作符索引访问操作符
getProperty 里的 o: T 和 name: K,意味着 o[name]: T[K]。 当你返回 T[K] 的结果,编译器会实例化键的真实类型,因此 getProperty 的返回值类型会随着你需要的属性改变;
person['name']具有类型 Person['name'] — 例子里则为 string 类型
索引访问操作符索引类型 和 字符串索引签名
keyof 和 T[K] 与字符串索引签名进行交互。 如果你有一个带有字符串索引签名的类型,那么 keyof T会是 string。 并且 T[string] 为索引签名的类型:
索引类型和字符串索引签名
网友评论