是否可以表示在TypeScript中运行时定义其原型的类?

时间:2017-07-12 17:16:13

标签: javascript typescript

我有一些JavaScript代码可以根据数据结构生成一个类,其方法的名称和签名取决于该数据结构的内容。是否可以在TypeScript中表示此关系?如果失败了,是否有可能至少指出输出类具有一些特定的(但在编译时未知)方法集,以及一组特定的可能方法签名?

在我的特定情况下,输入数据可能如下所示:

{
  'methodName1': {
    'flag1': true,
    'flag2': false
  },
  'methodName2': {
    'flag1': false,
    'flag2': false
  }
}

并且生成的类具有方法methodName1methodName2,每个方法的签名是基于标志值的4个预定义方法签名之一。

1 个答案:

答案 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