【发布时间】:2020-08-06 23:13:00
【问题描述】:
我是打字稿的新手,想知道: <type> vs xxx as <type> 之间有什么不同?我怎么知道在哪里使用哪一个?
let abc: any = {}
let abc = {} as any
【问题讨论】:
标签: typescript typescript2.0 typescript1.8
我是打字稿的新手,想知道: <type> vs xxx as <type> 之间有什么不同?我怎么知道在哪里使用哪一个?
let abc: any = {}
let abc = {} as any
【问题讨论】:
标签: typescript typescript2.0 typescript1.8
含义
语法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
【讨论】:
第一个称为类型注释,第二个称为类型断言,在这种情况下,这些概念之间没有任何区别。
【讨论】: