Тип вывода
TypeScript может вывести (проверить) типы переменных в соответствии с некоторыми простыми правилами. Вы можете быстро понять их на практике.
Определение переменных
Тип переменной, выведенной из определения:
Это пример типов, проходящих справа налево.
Тип возврата функции
Тип возврата может быть выведен с помощью оператора return
, как показано ниже. Функция вывода возвращает число:
Это пример типов, протекающих снизу вверх.
Присваивание
Типы функциональных параметров/возвращаемых значений также могут быть определены по присваиванию. Как показано ниже, тип foo
- Adder
, который позволяет параметрам a
и b
в foo
иметь тип number
.
Этот факт может быть подтвержден следующим кодом: TypeScript выдаст предупреждение об ошибке, как вы и ожидали:
Это пример типов, проходящих слева направо.
Если вы создаете функцию, а параметр функции является функцией обратного вызова, к ней применяются те же правила назначения. argument
к parameter
- это просто еще одна форма назначения переменных.
Структурированные
Эти простые правила также применяются к структурированному существованию (объектные литералы), например, тип foo
выводится как { a: number, b: number }
в следующих случаях:
То же самое касается массивов:
Если параметры функции могут быть выведены, то и могут быть деконструированы. В следующем примере параметры функции могут быть деконструированы в члены a/b
:
Тип защиты
Предупреждения
Будьте осторожны с параметрами
Если тип не может быть выведен с помощью присваивания, тип не попадет в параметры функции. Например, в следующем примере компилятор не знает тип foo
, поэтому он не может определить тип a
или b
.
Однако, если foo
описан по типу, параметры функции также могут быть выведены (a,
b
может быть выведен как number
):
Будьте осторожны с возвращаемыми значениями
Хотя TypeScript может обычно выводить возвращаемое значение функции, это может быть не то, что вам нужно. Например, следующая функция foo
возвращает any
:
Это связано с тем, что на тип возвращаемого значения влияет функция addOne
, в которой отсутствует определение типа (значит оно равно any
, поэтому addOne
возвращает any
, а foo
также возвращает any
).
Вот некоторые другие сценарии, которые вы можете себе представить, но хорошая новость заключается в том, что есть опция компилятора noImplicitAny
для обнаружения этих ошибок.
noImplicitAny
noImplicitAny
Опция noImplicitAny
используется, чтобы сообщить компилятору о возникновении ошибки, когда он не может вывести переменную (или он может быть выведен как неявный any
тип), вы можете:
Сделать его
any
типом, явно добавив аннотацию типа:any
;Помочь TypeScript вывести типы с некоторыми более правильными аннотациями типов.
Last updated
Was this helpful?