Экспорт служебных функций в машинописи? - PullRequest
0 голосов
/ 23 июня 2018

Я пытаюсь сделать это (псевдокод):

export const isDefined:Function<boolean> = ((value:any)) => {
    return !(value==null);
};

Функция isDefined возвращает логическое значение, если значение аргумента не равно нулю или не определено, и принимает тип any какаргумент.Мысли о том, как заставить это работать?

Ответы [ 2 ]

0 голосов
/ 23 июня 2018

Рекомендация: по возможности избегайте использования 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
}
0 голосов
/ 23 июня 2018

ОК - думаю, я наконец понял:

export const isDefined: Function = (value: any): boolean => {
  return !(value == null);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...