使用泛型函数中的参数类型创建新实例

时间:2019-09-06 14:40:06

标签: typescript typescript-generics

我实现了一个通用功能,用于将选项与默认选项合并:

  // definition
  protected defaultOptions<T>(options: T, type: new () => T): T {
    return {
      ...options,
      ...new type(),
    };
  }

它就像一个符咒,但我总是需要将类型作为第二个参数传递

  // use it like this
  upload(file: File, options: FilesUploadOptions) {
    options = this.defaultOptions(options, FilesUploadOptions);
    ...
    ...
  }

问题:

有一种方法可以达到相同的结果,但是要删除方法defaultOptions的第二个参数,并从第一个参数中获取并创建具有该类型的新实例?

  // definition
  protected defaultOptions<T>(options: T): T {

    const type = ???????; // some smart type generics here :)

    return {
      ...options,
      ...new type(),
    };
  }

这样,我可以像这样简单地使用它:

  upload(file: File, options: FilesUploadOptions) {
    options = this.defaultOptions(options);
    ...
    ...
  }

谢谢!

1 个答案:

答案 0 :(得分:1)

  

有一种方法可以达到相同的结果,但是要删除方法defaultOptions的第二个参数,并从第一个参数中获取并创建具有该类型的新实例?

不,那不可能。在TypeScript中,类型是纯编译时构造。编译为JavaScript时将其删除。这意味着在运行时无法访问它们。