代码之家  ›  专栏  ›  技术社区  ›  Jac Mos

“未知”与“任意”

  •  69
  • Jac Mos  · 技术社区  · 6 年前

    typescript 3.0介绍 unknown 根据他们的wiki输入:

    未知现在是保留的类型名,因为它现在是内置类型。 根据您对未知的预期用途,您可能希望删除 完全声明(倾向于新引入的未知类型),或 将其重命名为其他名称。

    两者有什么区别 未知的 any ?我们什么时候用 未知的 结束 任何 ?

    2 回复  |  直到 5 年前
        1
  •  102
  •   Hadrien TOMA legoscia    5 年前

    你可以阅读更多关于 unknown PR RC announcement 但其要点是:

    [..]未知,这是任何类型的安全对应项。任何东西都可以分配给未知,但是未知不能分配给任何东西,除了它本身和任何没有类型断言或基于控制流的收缩。同样,如果不先断言或缩小到更具体的类型,则不允许对未知对象执行任何操作。

    举几个例子:

    let vAny: any = 10;          // We can assign anthing to any
    let vUnknown: unknown =  10; // We can assign anthing to unknown just like any 
    
    
    let s1: string = vAny;     // Any is assigable to anything 
    let s2: string = vUnknown; // Invalid we can't assign vUnknown to any other type (without an explicit assertion)
    
    vAny.method();     // ok anything goes with any
    vUnknown.method(); // not ok, we don't know anything about this variable
    

    建议用法为:

    我们经常希望在typescript中描述功能最差的类型。这对于希望向它发出任何值信号的API很有用,因此在使用它之前必须执行某种类型的检查。这迫使用户安全地自省返回的值。

        2
  •  14
  •   Awad Maharoof    6 年前

    未知和任何之间的区别描述为:

    很像 any ,任何值都可以分配给 unknown 但是,不同于 任何 ,无法访问类型为的值的任何属性。 未知的 也不能调用/构造它们。此外,类型值 未知的 只能分配给 未知的 任何 .

    回答你应该何时使用的问题 未知的 结束 任何 :

    这对于希望发出信号的API很有用,可以是任何值,因此 你 必须 在使用前执行某种类型的检查。这种力量 用户要安全地自省返回的值。

    看看 TypeScript 3.0 announcement 例如检查类型变量 未知的 以及更详细的解释。