Что такое "как синтаксис", обозначенный tslint?

Я обновил 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);

Что такое синтаксис, и почему я должен его использовать?

Ответ 1

Обновите свой код следующим образом:

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

Как указано в книге "Глубокое погружение" TypeScript от Basarat Ali Syed, говорится о типе кастинга:

как 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 для согласованности.

Утверждение типа против литья

Причина, почему он не назвал "литье типов", заключается в том, что кастинг обычно подразумевает некоторую поддержку во время выполнения. Однако утверждения типа являются чисто конструкцией времени компиляции и способом предоставить подсказки компилятору о том, как вы хотите, чтобы ваш код анализировался.

Ответ 2

Если вы хотите устранить ошибку, вы также можете перейти к tslint.json и включить

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

при условии, что вы не против консистенции, как сказано.