我在打字稿方面很新。
我有以下代码:
export interface MetaObject {
public creationDate: string,
public modificationDate: string
}
export class A implements MetaObject {
constructor(
public id:number,
) { }
}
export class B implements MetaObject {
constructor(
public id:number,
) { }
}那么大的代码触发了错误:
TS2420 Class 'Booking' incorrectly implements interface 'MetaObject'.
Property 'active' is missing in type 'Booking'.我正在尝试拥有一个MetaObject,它是我不想在构造函数中指定的一些属性,但是我希望在我的所有对象上都存在这些属性。到目前为止,我已经用这些属性创建了一个接口,并且我的类正在实现它。这样做对吗?这里的目的实际上不是在类中添加任何其他内容,而是保留公共属性名称、类型、.在界面上。
这样做对吗?
发布于 2016-10-20 08:57:23
不,不是这么做的,有几件事
(1)接口中的所有内容都是公共的,没有必要指定属性是公共的,这会导致错误。
(2)如果实现接口,则必须将这些属性添加到类中,否则编译器将抱怨:
类'A‘不正确地实现接口’元对象‘。 属性'creationDate‘在'A’类型中缺失。
所以看起来应该是:
interface MetaObject {
creationDate: string;
modificationDate: string;
}
class A implements MetaObject {
constructor(
public id: number,
public creationDate: string,
public modificationDate: string) { }
}
class B implements MetaObject {
constructor(
public id: number,
public creationDate: string,
public modificationDate: string) { }
}(操场密码
如果不想重写实现,那么需要一个基类:
abstract class MetaObject {
constructor(
protected creationDate: string,
protected modificationDate: string) { }
getCreationDate() {
return this.creationDate;
}
getModificationDate() {
return this.modificationDate;
}
}
class A extends MetaObject {
constructor(public id: number, creationDate: string, modificationDate: string) {
super(creationDate, modificationDate);
}
}
class B extends MetaObject {
constructor(public id: number, creationDate: string, modificationDate: string) {
super(creationDate, modificationDate);
}
}(操场密码
另一种选择是使用混合器,但我认为这在您的情况下是过分的。
https://stackoverflow.com/questions/40149632
复制相似问题