Что такое "синтаксис as", на который указывает 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);

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

1 4

1 ответ:

Рефакторить ваш код таким образом:

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

Как указано в книге TypeScript Deep Dive Book by Basarat Ali Syed , в ней говорится о приведении типов:

Как foo против <foo>

Первоначально был добавлен синтаксис <foo>. Это продемонстрировано ниже:

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

Однако при использовании{[6] в грамматике языка возникает двусмысленность]}

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

Поэтому теперь рекомендуется просто использовать как foo для консистенция.

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

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