在Typescript中有两种方式来转换对象。
<type>variable
和
variable as type
这两个似乎都是永久性的(编译时)转换,因此转换对象将保留它的类型。例如:
let number: number = 2;
let string1 = <string>number;
let string2 = number as string;
string1; // -> the type is string
string1; // -> the type is string
我的问题:这两者有什么区别?
答案 0 :(得分:3)
他们都是一样的。引入foo as
字符串语法是为了避免使用JSX语法(通常与React一起使用)产生歧义。
更多信息here
答案 1 :(得分:2)
引自Basarat Ali Syed的书,TypeScript Deep Dive:
as foo
与<foo>
最初添加的语法是
<foo>
。这证明了 下面:
var foo: any
var bar = <string> foo; // bar is now of type "string"
然而,语言语法存在歧义 在JSX中使用
<foo>
样式断言:var foo = <string>bar; </string>
因此,现在建议您只使用foo作为foo 一致性。
答案 2 :(得分:2)
两者有什么区别?
他们是完全相同的。后来创建x as Y
作为<Y>x
的替代语法,以在TSX文件中启用非模糊类型断言(因为<Y>x
将被识别为JSX表达式)。 <{1}}语法是首选。
但是,你在这里有一个明显的误解。这不是类型转换,而是编译时类型 - 断言。两者之间的差异最好通过运行时发生的事情来证明:
x as Y
TypeScript没有运行时框架来进行自动类型转换和类型检查,这是一个设计目标。 (严重?)