Две функции с одинаковыми аргументами, но с разным типом возврата - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть функция, которая принимает две функции в качестве аргументов (fn1 и fn2). Эти функции должны принимать одно и то же произвольное количество аргументов с одинаковыми типами, но с разными возвращаемыми типами.

Есть ли способ убедиться, что типы аргументов функций одинаковы?

function myFunction(fn1: Function, fn2: (...args: any[]) => string): number {
    return 0;
}

1 Ответ

0 голосов
/ 12 ноября 2018

Вы можете использовать условные типы и кортежей в параметрах отдыха , чтобы извлечь типы аргументов из первой функции и указать вторую функцию в терминах извлеченных аргументов

type ArgTypes<T> = T extends (...a:infer A) => unknown?A:[]

function myFunction<T extends (...a: unknown[]) => unknown>(fn1: T, fn2: (...a: ArgTypes<T>) => string) :number {
    return 0;
}

myFunction((s: string) => s, (s:string) => s) //ok
myFunction((s: string) => s, (s:number) => s.toString()) //err
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...