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

为啥这个变量的类型和预期的不一样??

  •  
  •   love · 102 天前 · 1376 次点击
    这是一个创建于 102 天前的主题,其中的信息可能已经有所发展或是发生改变。
    const a: number[] = []
    const next: number | undefined = a[1]
    const x = next
    

    查看 Playground

    这里 x 的类型是 number,怎么不是 number | undefined ?

    我的意思是表示从数组中取一个值,它可能是 undefined,有什么标准写法?

    3 回复  |  直到 2019-12-07 21:42:33 +08:00
    rekey
        1
    rekey   66 天前
    自动推导出 x 是 a[1]
    a 是 number[] 那 a[1] 是啥?
    weakish
        2
    weakish   53 天前
    其实 next 你如果不注解的话,ts 自动推导的结果也是 `number`。所以你这里需要给 `x` 也加注解。

    之所以 ts 这里的类型直接推断为 number 是因为从数组中取一个值太常见了,给它开了后门,可以看 Anders Hejlsberg 本人的发言 aHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3B1bGwvNzE0MCNpc3N1ZWNvbW1lbnQtMTkyNjcwNDUz (抱歉我不能直接贴 url,因为我的 V2EX 账号没绑手机,请自行转换一下)
    love
        3
    love   52 天前
    @weakish 后来发现这个倒是不关数组的问题

    const next: number | undefined = 100
    这里 next 的类型实际上不是声明里指定的 number | undefined,而是 number
    和别的静态类型语言如 java 概念不一样,这个不太好理解上去。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   789 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 21:29 · PVG 05:29 · LAX 13:29 · JFK 16:29
    ♥ Do have faith in what you're doing.