关于 typescript 条件类型中的 extends

2021-07-20 23:31:10 +08:00
 mosade
interface Info{
  name:string;
  date:string;
  address:string;
}
interface PickInfo{
  address:string;
}

type Test<T>=T extends PickInfo?string:number;
type Test2=Test<Info>;
//==>type Test2 = string

Test2 显示的是 string 类型,这里T extends PickInfo不是子集的意思吗?

1047 次点击
所在节点    TypeScript
2 条回复
noe132
2021-07-20 23:58:33 +08:00
T extends Q ? U : V
的意思是
let a: T = somevalue
let b: Q = a
如果 变量 a 能 赋值给 变量 b 没有类型错误则返回 U 否则 V.

typescript interface 没有实际类型,是个 ducktype,所以你可以把 (U & V)类型的值赋值给 V 类型的变量
PickInfo 类型的变量可以接收 Info 类型的值,因为 Info 满足 PickInfo 所有的要求。
chnwillliu
2021-07-21 10:35:27 +08:00
T extends P, 说明 T 类型 是 P 类型的一种,但是 T 类型可能比 P 类型存在更多的类型描述,即所谓 extends 的含义。Cat extends Animal, 但是 Cat 比 Animal 描述更确切,更具体。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/790725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX