Рекомендация: по возможности избегайте использования Function
. Стирает безопасность типа:
// these should error, but they don't
isDefined()
isDefined(1, 2, 3, 'too', 'many', 'args')
Чтобы сохранить подпись типа, избавьтесь от Function
. Также можно использовать !=
для простоты:
export const isDefined = (value: any): boolean => {
return value != null
}
В качестве бонуса вы можете использовать дженерики, чтобы сделать функцию немного умнее. Здесь функция использует generic T
для определения типа передаваемого в нее типа, затем она использует type guard для сужения типа в некоторых контекстах, например, заявление if (Примечание: я определил его как function
, чтобы он работал в файлах .tsx
. Функции единой общей стрелки не могут быть проанализированы из-за неоднозначностей с JSX.)
export function isDefined<T>(value: T | null | undefined): value is T {
return value != null
}
declare const message: string | undefined
if (isDefined(message)) {
message // here, message is string
} else {
message // here, message is undefined
}