代码之家  ›  专栏  ›  技术社区  ›  dagda1

为什么typescript编译器不能告诉值是在显式类型化时定义的?

  •  0
  • dagda1  · 技术社区  · 5 年前

    我有这个代码:

    interface Foo {
      value?: string;
    }
    
    const item1: Foo = { value: 'foo' }
    
    // Object is possibly 'undefined'.
    console.log(`Message ${item1.value.substring(4)}`);
    
    const item2 = { value: 'foo' }
    
    // all good in the hood
    console.log(`Message ${item2.value.substring(4)}`);
    

    什么时候? item1 输入为foo, tsc 无法判断值是否已定义,即使该值已在同一范围内声明。

    我可以理解item1是否被传递到函数中,但不在同一范围内。

    0 回复  |  直到 5 年前
        1
  •  2
  •   Phillip    5 年前

    如你所说;你 明确地 打那个 item1 属于类型 Foo . 财产 value 定义为类型 string | undefined 因此,typescript会告诉您 价值 可能未定义。

    如果不指定 item2 ,typescript将其类型推断为 { value: string } --因此 价值 未定义。