Принудительное применение явных аннотаций возвращаемого типа функции?

#typescript #tsconfig #compiler-options

#typescript

Вопрос:

Я хочу отключить возможность использования «any» в typescript. Например, у меня есть следующая функция

 func() {
   return true
}
 

я хочу потребовать, чтобы это было так

 func(): boolean {
    return true
}
 

Я знаю, что TSLint может проверить это, но я могу проигнорировать это и все равно скомпилировать. Есть ли необходимость в этом для компиляции в файле TSConfig?

Комментарии:

1. Вы пробовали настройку "noImplicitAny": true ?

2. На самом деле, ни один из этих примеров кода не использует any тип. Возвращаемый тип boolean в обоих случаях.

3. Является ли tslint опцией? У вас нет никакого варианта. В качестве альтернативы, tsconfig of no-implict-any работает достаточно хорошо для большинства случаев, в то же время позволяя явное приведение к любому.

4. Звучит как проблема XY. mywiki. wooledge.org/XyProblem

5. «Я могу проигнорировать это и все равно скомпилировать» — это то, как TypeScript имеет тенденцию работать в любом случае, если вы не включите параметр --noEmitOnError конфигурации. Возможно, вам следует настроить свою систему сборки так, чтобы в случае сбоя tslint вы не создавали выходные файлы.

Ответ №1:

Нет, типы возвращаемых функций выводятся в typescript. Сам компилятор не имеет настройки для отключения вывода типов в функциях. Эта функция была запрошена и отклонена, как обсуждалось в этом выпуске, размещенном в репозитории typescript .

Однако ваш любимый инструмент lint может предупредить вас, когда для функции не указано определение типа. Для полноты я предоставлю эту информацию.

tslint

Правило называется typedef . Добавьте следующую строку в конфигурацию tslint

 "typedef": [ true, "call-signature", "arrow-call-signature" ]
 

eslint

В плагине typescript-eslint это правило называется explicit-function-return-type . (Я не могу предоставить инструкции по настройке, поскольку я не использую eslint. Любой желающий может отредактировать его в)

Комментарии:

1. Примечание: tslint теперь устарел, typescript-eslint должен использоваться вместо