Как «привязать» параметры к TypeScript, сделав один тип «зависимым» от другого типа? - PullRequest
0 голосов
/ 03 сентября 2018

Позвольте мне объяснить:

  • arg1 должно быть Type1 или Type2
  • arg2 должно быть Type1.options (если arg1 равно Type1) или Type2.options в противном случае
create(arg1: Type1 | Type2, arg2?: any) {}

Можно ли определить эту «границу» в TypeScript?

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Вы можете использовать универсальное объявление , чтобы вывести зависимость следующим образом:

function create<T extends (Type1 | Type2)> (arg1: T, arg2?: T['options']) { ... }

Вы также можете создать псевдоним, например type ArgType = Type1 | Type2, чтобы упростить общее ограничение:

function create<T extends ArgType> (arg1: T, arg2?: T['options']) { ... }
0 голосов
/ 03 сентября 2018

Вы ищете перегруженную функцию :

function create(arg1: Type1, arg2?: Type1.options);
function create(arg1: Type2, arg2?: Type2.options);
function create(arg1: Type1 | Type2, arg2?: Type1.options | Type2.options) { ... }

Обратите внимание, что последняя подпись («сигнатура реализации») не является одной из сигнатур перегрузки и должна быть достаточно широкой, чтобы охватить все сигнатуры перегрузки. Вы отсортируете фактические аргументы в теле функции.

...