V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mosade
V2EX  ›  TypeScript

关于 typescript 条件类型中的 extends

  •  
  •   mosade · 2021-07-20 23:31:10 +08:00 · 1012 次点击
    这是一个创建于 982 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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不是子集的意思吗?

    2 条回复    2021-07-21 10:35:27 +08:00
    noe132
        1
    noe132  
       2021-07-20 23:58:33 +08:00   ❤️ 1
    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
        2
    chnwillliu  
       2021-07-21 10:35:27 +08:00 via Android   ❤️ 1
    T extends P, 说明 T 类型 是 P 类型的一种,但是 T 类型可能比 P 类型存在更多的类型描述,即所谓 extends 的含义。Cat extends Animal, 但是 Cat 比 Animal 描述更确切,更具体。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1004 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:58 · PVG 03:58 · LAX 12:58 · JFK 15:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.