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



我实现了一个通用函数来合并选项和默认选项:

// 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);
...
...
}

谢谢!

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

不,这是不可能的。在 TypeScript 中,类型是纯粹的编译时构造。当编译到 JavaScript 时,它们被删除。这意味着在运行时无法访问它们。

最新更新