web-dev-qa-db-ja.com

tslintによって指摘された「as構文」とは何ですか?

Tslintをアップグレードしたところ、次のエラーが表示されました。

ERROR: src/Metronome/JobFetcher.ts[13, 32]: Type assertion using the '<>' syntax is forbidden. Use the 'as' syntax instead.

問題のコードは次のようになります。

const jobs = <JobConfig[]> <any> await rp(fetchJobsOptions);

As構文とは何ですか?なぜ使用する必要がありますか?

13
k0pernikus

次のようにコードをリファクタリングします。

const jobs = await rp(fetchJobsOptions) as JobConfig[];

Basarat ALi SyedによるTypeScript Deep Dive book で指摘されているように、それは型キャストについて述べています:

foo vs. <foo>

元々追加された構文は<foo>。これを以下に示します。

var foo: any;
var bar = <string> foo; // bar is now of type "string"

ただし、使用するときの言語文法にはあいまいさがあります。

<foo> style assertions in JSX:
var foo = <string>bar;
</string>

したがって、一貫性のためにfooとして使用することをお勧めします。

型アサーションとキャスト

「型キャスト」と呼ばれない理由は、通常、キャストが何らかのランタイムサポートを意味するためです。ただし、型アサーションは純粋にコンパイル時の構成であり、コードを分析する方法についてコンパイラにヒントを提供する方法です。

30
k0pernikus

エラーを抑制したい場合は、tslint.jsonおよびinclude

...
"rules": {
    "no-angle-bracket-type-assertion": false,
    ...
}
...

あなたが言ったように一貫性を気にしないならば。

0