【问题标题】:variable: <type> vs variable as <type> in typescript变量:<type> vs variable as <type> in typescript
【发布时间】:2020-08-06 23:13:00
【问题描述】:

我是打字稿的新手,想知道: &lt;type&gt; vs xxx as &lt;type&gt; 之间有什么不同?我怎么知道在哪里使用哪一个?

let abc: any = {}
let abc = {} as any

【问题讨论】:

    标签: typescript typescript2.0 typescript1.8


    【解决方案1】:

    含义

    语法variable: type 称为类型注释。它声明变量将在其整个生命周期中包含指定类型的值,并要求打字稿编译器验证是否是这种情况。

    语法expression as type 称为类型断言。它说你知道表达式会产生这种类型的值,并要求编译器相信你。

    为什么两者都存在

    需要类型注解是因为可以声明一个变量而不给它赋值,也因为以后可以赋值一个新值,所以最初赋值的值可能不能代表变量的所有值将在其整个生命周期内保持不变。

    如果程序员实际上比编译器更了解类型,则需要类型断言。

    使用哪个?

    一般来说,您应该支持类型注释,以便编译器检查您是否正确,并捕获更多错误。例如,考虑:

    let person: Person = {}; // error: property name is missing
    

    let person = {} as Person; // the compiler believes you
    person.name.toUpperCase(); // runtime error because name is undefined
    

    但是,有时您可能真的知道编译器所做的更多,在这种情况下,只有类型断言才能理解这一点(尽管几乎总是有更好的方法)。

    附录:避免any

    虽然我们讨论的是最佳实践,但您应该尽可能避免使用 any,因为它也会绕过类型检查:

    let obj: any = {}; // totally correct
    let person: Person = obj; // compiler believes you, because any is special
    person.name.toUpperCase(); // runtime error, because name is undefined
    

    【讨论】:

      【解决方案2】:

      第一个称为类型注释,第二个称为类型断言,在这种情况下,这些概念之间没有任何区别。

      【讨论】:

      • 与any没有区别,对于任何其他类型两者差别很大
      • 有什么区别?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-17
      • 2013-12-02
      • 2019-10-09
      • 2023-01-09
      • 1970-01-01
      相关资源
      最近更新 更多