繁体   English   中英

TypeScript 中的类型断言运算符是什么?

[英]What is the type assertion operator for in TypeScript?

该规范并没有过多说明类型断言运算符在 TypeScript 中的哪些方面可能会有所帮助。 我的代码中不需要它。 所以我很好奇它应该解决什么样的问题。 有任何想法吗?

它有点像type casting但是因为它没有运行时支持(它只是一个编译时断言),TypeScript 选择将它称为“类型断言”。 考虑这个例子:

var element1 = document.getElementById('canvas'); // Determined to be HTMLElement
element1.getContext('2d'); // ERROR as it is HTMLElement 



// Determined to be canvas due to your assertion
var element2 = <HTMLCanvasElement>document.getElementById('canvas'); 
element2.getContext('2d'); // Valid 

每当 typescript 类型推断由于不兼容的推断类型而阻止您分配东西时,您将需要它。

Typescript 类型断言有两种形式。 此处来自Typescript 手册的示例。

  1. 类型断言的tsx括号语法(在tsx文件中不起作用):
let strLength: number = (<string>someValue).length;
  1. as类型断言的语法(在tstsx ):
let strLength: number = (someValue as string).length;

类型断言覆盖了当前版本的 Typescript 的(有限的)类型推断功能,如果您是正确的,这可能是一件好事,但也存在您的判断不正确并且 TS 会相信您的风险。 如果您推断的内容与 TS 推断的内容之间可能存在不匹配,则 TS 仍然会犹豫不决,那么您可以更强烈地否决 TS 推断, as unknown as string

我假设您是指函数参数后的: [type]符号? 它似乎对最终的 .js 文件没有影响,但是如果您通过编译器运行 .ts 文件,如果它发现任何类型断言参数的意外输入类型,它将抛出错误。 希望能回答你的问题。

类型断言的尖括号语法,例如:

let content: any = "这是一个堆栈溢出教程";

让输出:数字=(内容)。 长度;

让 output1: number = (content as string)。 长度;

控制台日志(输出);

在上面的例子中,我们有一个 any 类型的变量内容。 我们将这个变量的值赋给另一个名为 output 的变量。然而我们知道代码是字符串类型,即使它被声明为 any。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM