Я пришел из объектно-ориентированных языков, таких как Java, и я пытаюсь преобразовать модуль .jsx в .tsx, чтобы использовать типы.
Я должен сказать, что это довольно легко и просто, но мне не нравится следующее:
let methodName = 'GET';
Это объявление переменной в моем методе. Компилятор согласен, что я не назначаю тип, но из java мне это не нравится! Я хотел бы получить ошибку «тип переменной methodName is undefined», чтобы я был вынужден написать это таким образом:
let methodName:string = 'GET';
То же самое касается моих методов, для машинописного текста абсолютно нормально следующее:
handleButtonClick = evt => {
}
но это совсем не хорошо, я должен быть вынужден сделать что-то вроде этого:
handleButtonClick = (evt:React.MouseEvent):void => {
}
Можно ли добиться этого, установив какой-либо параметр?
Обратите внимание, что во многих отношениях TS намного строже, чем Java. Если вы объявите его const
, то тип будет даже не string
, а "GET"
. Типы строковых литералов даже не существуют в Java.
В разделе документации параметры компилятора вы найдете параметр --noImplicitAny
, который указывает TypeScript не разрешать неявный any
.
Обратите внимание, однако, что ваш первый пример не делает mehodName
неявно any
:
let methodName = 'GET';
TypeScript делает вывод тип methodName
из того, что вы ему назначаете, и попытка назначить что-то, кроме строки, будет ошибкой. Документация вывод типа подробно описывает это. В большинстве случаев вам не нужно явно вводить что-то, потому что тип можно вывести. Код по-прежнему типобезопасен.
Это неявно сделало бы methodName
типа any
:
export let methodName;
С --noImplicitAny
это ошибка. Без него для экспортируемой переменной используется неявный тип any
.
У компилятора есть строгий режим, который включает такие настройки, как noImplicitAny, если вы это имеете в виду. См. typescriptlang.org/docs/handbook/compiler-options.html