11

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

4

4 回答 4

22

然而,它有点像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 类型推断由于推断类型不兼容而阻止您分配事物时,您将需要它。

于 2013-10-19T02:26:23.357 回答
3

Typescript 类型断言有两种形式。来自Typescript 手册的示例在这里

  1. 类型断言的尖括号语法(在文件中不起作用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

于 2020-01-15T18:49:25.013 回答
0

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

于 2013-10-19T02:10:20.960 回答
0

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

let content: any = "This is a stack overflow tutorial";

let output: number = (<string> content). length;

let output1: number = (content as string). length;

console.log(output);

在上面的示例中,我们有一个 any 类型的变量内容。我们将此变量的值分配给另一个称为输出的变量。但是我们知道代码是字符串类型的,即使它被声明为any。

于 2021-12-11T19:22:04.517 回答