gpt4 book ai didi

typescript 定义。什么时候类需要动态?

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:41 25 4
gpt4 key购买 nike

我尝试编写的定义文件之一是过滤器。过滤器代码最初是从 JS 文件加载的,然后使用该过滤器的字符串名称。

export class Filter
{
do stuff...
}

问题是每个过滤器都有自己的属性。

例如,“Marble”滤镜可能具有“频率”值,而“BlurX”滤镜具有“模糊”值。

所以:

//loaded MarbleFilter.js as a script previously
var filter: Filter = new Filter("Marble");
filter.frequency = 10 //error

我该如何处理这种情况?有 12 种过滤器类型,所以也许我可以用接口(interface)做点什么?但是,我不明白其他人怎么会知道这一点:

var filter: IMarbleFilter = <IMarbleFilter>new Filter("Marble");

如果我确实使用上面的示例,是否适合创建一个空的 IFilter?那么 IMarbleFilter 实现了 IFilter,Filter 也实现了?

如有任何建议,我将不胜感激。我在我的项目中在本地询问,但没有来自社区的回应,所以请大师们试一试。

最佳答案

您不能使用 TypeScript classes 执行此操作,因为类上的 new 运算符会返回该类的实例。但是您可以通过使用专门签名的接口(interface)来做到这一点:

interface Filter{}
interface MarbleFilter extends Filter{ frequency: number; }
interface BlurFilter extends Filter{}

interface FilterCreator{
new (arg:"Marble"): MarbleFilter;
new (arg:"Blur"): BlurFilter;
new (arg:string):Filter;
}

var Filter:FilterCreator;
// TODO: create a javascript variable that satisfies
// the specified interface

// usage:
var filter = new Filter("Marble");
filter.frequency = 10; // okay

关于 typescript 定义。什么时候类需要动态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23800698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com