gpt4 book ai didi

Typescript:用装饰器给类添加接口(interface)信息

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:30 25 4
gpt4 key购买 nike

我有一个这样的装饰器:

export function Entity(options?: string) {
return (target) => {
//do something with class(target) here
}
}

和一个可以这样装饰的类:

@Entity({someOptions: "foobar"})
export class Product {
id: string;
title: string;
price: number;
}

如何在不执行此操作的情况下自动强制使用 id:

interface EntityInterface {
id: string;
}

@Entity({someOptions: "foobar"})
export class Product implements EntityInterface {
id: string;
title: string;
price: number;
}

装饰器可以实现自动添加的接口(interface)吗?

最佳答案

装饰器不能改变类的结构,这是设计使然。您可以做的是使用一个函数,该函数将一个类作为参数并返回一个具有额外字段的新类:

export function Entity(options?: string) {
return <T extends new (...args: any[]) => any>(target: T) => {
return class extends target {
id: string
constructor(...args: any[]) {
super(...args);
this.id = options;
}
}
}
}


export const Product = Entity("foobar")(class Product {
public constructor(values: Partial<Product>) {

}
title: string;
price: number;
});

let d = new Product({
title: ""
});

您可以在函数内派生的类中添加字段和方法,它们将在返回的类中可用,唯一潜在的问题是字段/方法在作为参数传递给 实体

关于Typescript:用装饰器给类添加接口(interface)信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49737179/

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