<type>变量和变量作为Typescript中的类型有什么区别

时间:2017-01-20 14:15:49

标签: typescript

在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

我的问题:这两者有什么区别?

3 个答案:

答案 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   一致性。

TypeScript Deep Dive

答案 2 :(得分:2)

  

两者有什么区别?

他们是完全相同的。后来创建x as Y作为<Y>x的替代语法,以在TSX文件中启用非模糊类型断言(因为<Y>x将被识别为JSX表达式)。 <{1}}语法是首选。

但是,你在这里有一个明显的误解。这不是类型转换,而是编译时类型 - 断言。两者之间的差异最好通过运行时发生的事情来证明:

x as Y

TypeScript没有运行时框架来进行自动类型转换和类型检查,这是一个设计目标。 (严重?)