interface b{
c:string;
d:number;
}
interface e{
c:string;
}
type a<T>=T extends e?string:number;
type t=a<b>
//type tt2 = string
这里的tt2为啥是string?
interface b{
c:string;
d:number;
}
interface e{
c:string;
}
type a<T>=T extends e?string:number;
type t=a<b>
//type tt2 = string
这里的tt2为啥是string?
是继承(严格来说是扩展,也即子类在拥有父类的全部成员基础之上、额外扩展出一些成员)。
但 TS 的类型系统是“鸭子类型”(当看到一只鸟走起来像鸭子、游起来像鸭子、叫起来也像鸭子,那么这只鸟就是鸭子)。
所以并不需要显式地 interface b extends e {}
。
13 回答12.8k 阅读
7 回答1.9k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
6 回答835 阅读✓ 已解决
6 回答1k 阅读
2 回答1.3k 阅读✓ 已解决
extends
可以用作继承,也可以用作条件类型,或者类型约束,具体取决于使用场景。在
interface
和class
上时,表示继承,如下:在泛型中,可以用作类型约束,如下:
还可以用作条件类型,有点像JS中条件类型的形式
condition ? trueExpression : falseExpression
,形式如下例如:
针对上面的例子,我们加上泛型使其更加通用
相信看到这,再结合 @然后去远足 的答案,你应该知道答案了
参考