规范并没有过多说明类型断言运算符在 TypeScript 中可能有用的地方。我的代码中不需要它。所以我很好奇它应该解决什么样的问题。有任何想法吗?
问问题
10612 次
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 手册的示例在这里。
- 类型断言的尖括号语法(在文件中不起作用
tsx
):
let strLength: number = (<string>someValue).length;
as
类型断言的语法(在内部ts
或tsx
类似范围内工作):
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 回答