Typescript - - 高级用法
extends
extends 关键字在TS中的两种用法,即接口继承和条件判断。
接口继承
interface T1 {
name: string
}
interface T2 {
sex: number
}
// 多重继承,逗号隔开
interface T3 extends T1,T2 {
age: number
}
// 合法
const t3: T3 = {
name: 'xiaoming',
sex: 1,
age: 18
}
T1和T2两个接口,分别定义了name属性和sex属性,T3则使用extends使用多重继承的方式,继承了T1和T2,同时定义了自己的属性age,此时T3除了自己的属性外,还同时拥有了来自T1和T2的属性。
条件判断
// 示例1
interface Animal {
eat(): void
}
interface Dog extends Animal {
bite(): void
}
// A的类型为string
type A = Dog extends Animal ? string : number
const a: A = 'this is string'
Extends 用来条件判断的语法和 JS 的三元表达是很相似,如果问号前面的判断为真,则将第一个类型 string 赋值给 A,否则将第二个类型 number 赋值给 A。
extends判断条件真假的逻辑是什么?
如果 extends 前面的类型能够赋值给 extends 后面的类型,那么表达式判断为真,否则为假。
泛型使用
type A1 = 'x' extends 'x' ? string : number; // string
type A2 = 'x' | 'y' extends '