首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TS中创建一组公共类属性

在TS中创建一组公共类属性
EN

Stack Overflow用户
提问于 2016-10-20 08:47:57
回答 1查看 620关注 0票数 0

我在打字稿方面很新。

我有以下代码:

代码语言:javascript
复制
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,
    ) { }
}

那么大的代码触发了错误:

代码语言:javascript
复制
TS2420 Class 'Booking' incorrectly implements interface 'MetaObject'.
  Property 'active' is missing in type 'Booking'.

我正在尝试拥有一个MetaObject,它是我不想在构造函数中指定的一些属性,但是我希望在我的所有对象上都存在这些属性。到目前为止,我已经用这些属性创建了一个接口,并且我的类正在实现它。这样做对吗?这里的目的实际上不是在类中添加任何其他内容,而是保留公共属性名称、类型、.在界面上。

这样做对吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-20 08:57:23

不,不是这么做的,有几件事

(1)接口中的所有内容都是公共的,没有必要指定属性是公共的,这会导致错误。

(2)如果实现接口,则必须将这些属性添加到类中,否则编译器将抱怨:

类'A‘不正确地实现接口’元对象‘。 属性'creationDate‘在'A’类型中缺失。

所以看起来应该是:

代码语言:javascript
复制
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) { }
}

(操场密码

如果不想重写实现,那么需要一个基类:

代码语言:javascript
复制
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);
    }
}

(操场密码

另一种选择是使用混合器,但我认为这在您的情况下是过分的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40149632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档