我有一些JavaScript代码可以根据数据结构生成一个类,其方法的名称和签名取决于该数据结构的内容。是否可以在TypeScript中表示此关系?如果失败了,是否有可能至少指出输出类具有一些特定的(但在编译时未知)方法集,以及一组特定的可能方法签名?
在我的特定情况下,输入数据可能如下所示:
{
'methodName1': {
'flag1': true,
'flag2': false
},
'methodName2': {
'flag1': false,
'flag2': false
}
}
并且生成的类具有方法methodName1
和methodName2
,每个方法的签名是基于标志值的4个预定义方法签名之一。
答案 0 :(得分:0)
使用您的标志示例,您可以使用交集类型创建排序工厂:
type Switch<A, B, C, D> =
& ((f1: false, f2: false) => A)
& ((f1: false, f2: true) => B)
& ((f1: true, f2: false) => C)
& ((f1: true, f2: true) => D);
declare let provider: Switch<
(arg: number) => number,
(arg: string) => string,
(arg: boolean) => boolean,
(arg: Date) => Date
>;
let afun = provider(false, false);
afun(3); // returns number
let bfun = provider(false, true);
bfun("hello"); // returns string
let cfun = provider(true, false);
cfun(false); // returns boolean
let dfun = provider(true, true);
dfun(new Date()); // returns Date