2017-01-06 5 views
4

Возможно, я пытаюсь достичь невозможного, но здесь.Тип машинописного вывода возвращаемого типа из переданных функций тип возврата

Хочу определить функцию (функция A), которая будет возвращать один и тот же тип, как новая функция передается в параметр функции А.

например

export function test<T> (arg:Function):T { 
    return arg; 
} 

function a():string { 
    return 'a'; 
} 

function b():number { 
    return 0; 
} 

let aVal:string = test(a); 
let bVal:number = test(b); 

Очевидно, что это позволит мне сильно набирать ответы для некоторых ошибок времени компиляции.

У кого-нибудь есть идеи или знаете, если я просто мечтаю.

** Примечание: Код хлопнул вместе демо **

Приветствия

ответ

2

Как насчет этого?

function test<T>(arg:() => T): T { 
    return arg(); 
} 

function a(): string { 
    return 'a'; 
} 

function b(): number { 
    return 0; 
} 

let aVal: string = test(a); 
let bVal: number = test(b); 

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

+0

Это потрясающе, я не знал, что вы можете определить такую ​​сигнатуру функции, которая не определяет сама функция. Спасибо –

+0

ну .. что мы определили есть параметр функции, который, как ожидается, будет функцией, которая не принимает параметр и что-то возвращает. это все. :) – toskv

+0

Brill точно, что мне нужно –