tslint指出的"as syntax"是什么?

k0p*_*kus 14 typescript tslint

我升级了tslint,现在它抱怨:

ERROR: src/Metronome/JobFetcher.ts[13, 32]: Type assertion using the '<>' syntax is forbidden. Use the 'as' syntax instead.
Run Code Online (Sandbox Code Playgroud)

违规代码如下:

const jobs = <JobConfig[]> <any> await rp(fetchJobsOptions);
Run Code Online (Sandbox Code Playgroud)

什么是语法,我为什么要使用它?

k0p*_*kus 31

像这样重构您的代码:

const jobs = await rp(fetchJobsOptions) as JobConfig[];
Run Code Online (Sandbox Code Playgroud)

正如Basarat Ali Syed在TypeScript Deep Dive一书中所指出的那样,它描述了类型转换:

作为foo vs. <foo>

最初添加的语法是<foo>.这在下面说明:

var foo: any;
var bar = <string> foo; // bar is now of type "string"
Run Code Online (Sandbox Code Playgroud)

然而,使用时语言语法存在歧义

<foo> style assertions in JSX:
var foo = <string>bar;
</string>
Run Code Online (Sandbox Code Playgroud)

因此,现在建议您只使用foo作为一致性.

键入断言与强制转换

它之所以不被称为"类型转换",是因为转换通常意味着某种运行时支持.但是,类型断言纯粹是一个编译时构造,也是一种为编译器提供有关如何分析代码的提示的方法.


小智 8

如果您想抑制错误,您也可以转到tslint.json并包含

...
"rules": {
    "no-angle-bracket-type-assertion": false,
    ...
}
...
Run Code Online (Sandbox Code Playgroud)

只要你不介意所说的一致性。