【问题标题】:How to create a generic type function that returing value that the type is based of a returned value of a passing in function?如何创建一个返回值的泛型类型函数,该类型基于传入函数的返回值?
【发布时间】:2020-07-22 04:41:54
【问题描述】:
我有一个函数,我可以这样称呼它:
var a=myFunction(callback(return 33)) // a should be of type {a}
var b=myFunction(callback(return 'string')) // b should be of {type b}
var c=myFunction(callback(return [33])) // c should be of type {number[]}
我希望 a 和 b 将是数字或字符串或任何基于从回调返回的参数。
myFunction 正在调用回调进行一些计算并返回相同类型的值。
如何为myFunction创建类型定义?
【问题讨论】:
标签:
typescript
jsdoc
type-definition
【解决方案1】:
const myFunction = <T>(callback: (...args: T[]) => T): T => {
return callback();
};
const fnclbnum = (v: number): number => v * 2;
const fnclbstr = (v: string): string => v +'test';
const fnclbstrarr = (v: string[]): string[] => [...v, 'test'];
const a: number = myFunction<number>((val) => fnclbnum(val));
const b: string = myFunction<string>((val) => fnclbstr(val));
const c: string[] = myFunction<string[]>((val) => fnclbstrarr(val));
const d: number = myFunction<number>(() => fnclbnum(2));
const e: string = myFunction<string>(() => fnclbstr("test"));
const f: string[] = myFunction<string[]>(() => fnclbstrarr(["1", "ER"]));
console.log({ d }, { e }, { f });