是否可以在TypeScript中使用带有ES6类getter、setter和私有属性的接口

是否可以在TypeScript中使用带有ES6类getter、setter和私有属性的接口,typescript,interface,Typescript,Interface,我正在使用TypeScript,并且我正在尝试解决如何在使用ES6 getter和setter的类中实现接口 这可能吗?使用下面的代码突出显示类中的错误 例如: (属性)SportsCar.make:string 类型“SportsCar”中的属性“make”不能分配给基本类型“Car”中的相同属性。 类型“string”不可分配给类型“{(make:string):string;():void;}”.ts(2416)* 守则: export interface Car { _make:

我正在使用TypeScript,并且我正在尝试解决如何在使用ES6 getter和setter的类中实现接口

这可能吗?使用下面的代码突出显示类中的错误

例如:

(属性)SportsCar.make:string
类型“SportsCar”中的属性“make”不能分配给基本类型“Car”中的相同属性。
类型“string”不可分配给类型“{(make:string):string;():void;}”.ts(2416)*

守则:

export interface Car {
    _make: string;
    _model: string;

    make(make: string): string; // for setter
    make(): void; // for getter
    
    model(model: string): string; // for setter
    model(): void; // for getter
}

class SportsCar implements Car {

  _make: string;
  _model: string;

  constructor(make:string, model: string) {
  } 

  set make(make: string) {
    this._make = make
  }

  get make() {
    return this._make
  }

  set model(model: string) {
    this._model = model
  }

  get model() {
    return this._model
  }
}

module.exports = SportsCar;
export interface Car {
    _make: string;
    _model: string;

    setmake(make: string): void; // for setter
    getmake(): string; // for getter
    
    setmodel(model: string): void; // for setter
    getmodel(): string; // for getter
}

class SportsCar implements Car {

   private _make: string;
   private _model: string;

  constructor(make:string, model: string) {
  } 

  setmake(make: string) {
    this._make = make
  }

  getmake() {
    return this._make
  }

  setmodel(model: string) {
    this._model = model
  }

  getmodel() {
    return this._model
  }

}

module.exports = SportsCar;
使用
getMake()
setMake()
代替ES6的getter和setter可以工作。但是如果可能的话,我想使用ES6类的getter和setter

例如,这项工作:

export interface Car {
     _make: string;
    _model: string;

    setmake(make: string): void; // for setter
    getmake(): string; // for getter
    
    setmodel(model: string): void; // for setter
    getmodel(): string; // for getter
}

class SportsCar implements Car {

   _make: string;
   _model: string;

  constructor(make:string, model: string) {
  } 

  setmake(make: string) {
    this._make = make
  }

  getmake() {
    return this._make
  }

  setmodel(model: string) {
    this._model = model
  }

  getmodel() {
    return this._model
  }

}

module.exports = SportsCar;
最后,在使用接口时,是否可以将类属性设置为private?接口似乎不允许您定义这个,如果使用下面的代码,我会在VS代码中得到以下错误

守则:

export interface Car {
    _make: string;
    _model: string;

    make(make: string): string; // for setter
    make(): void; // for getter
    
    model(model: string): string; // for setter
    model(): void; // for getter
}

class SportsCar implements Car {

  _make: string;
  _model: string;

  constructor(make:string, model: string) {
  } 

  set make(make: string) {
    this._make = make
  }

  get make() {
    return this._make
  }

  set model(model: string) {
    this._model = model
  }

  get model() {
    return this._model
  }
}

module.exports = SportsCar;
export interface Car {
    _make: string;
    _model: string;

    setmake(make: string): void; // for setter
    getmake(): string; // for getter
    
    setmodel(model: string): void; // for setter
    getmodel(): string; // for getter
}

class SportsCar implements Car {

   private _make: string;
   private _model: string;

  constructor(make:string, model: string) {
  } 

  setmake(make: string) {
    this._make = make
  }

  getmake() {
    return this._make
  }

  setmodel(model: string) {
    this._model = model
  }

  getmodel() {
    return this._model
  }

}

module.exports = SportsCar;
错误:

高级跑车 类“SportsCar”错误地实现了接口“Car”。
财产“U make”在类型“SportsCar”中是私有的,但在类型“Car”中不是。ts(2420)

您的一切都是可能的。请看以下代码:

export interface Car {
    make: string;
    model: string;
}

export class SportsCar implements Car {

   private _make: string;
   private _model: string;

  constructor(make:string, model: string) {
    this._make = make;
    this._model = model;
  }

  set make(make: string) {
    this._make = make
  }

  get make() {
    return this._make
  }

  set model(model: string) {
    this._model = model
  }

  get model() {
    return this._model
  }

}


你可以试试。

你的一切都是可能的。请看以下代码:

export interface Car {
    make: string;
    model: string;
}

export class SportsCar implements Car {

   private _make: string;
   private _model: string;

  constructor(make:string, model: string) {
    this._make = make;
    this._model = model;
  }

  set make(make: string) {
    this._make = make
  }

  get make() {
    return this._make
  }

  set model(model: string) {
    this._model = model
  }

  get model() {
    return this._model
  }

}


你可以试试。

好的,谢谢。但这不包括接口中的私有属性。如果不在类中将它们设置为私有,则可以将它们包括在接口中。但我需要让他们在课堂上保持隐私。这不可能吗?谢谢。不,您不能成为私有接口成员。有两个公共属性,那么为什么你需要在接口中有私有属性呢?关于你上面提供的方法,接口的目的不是确保类实现所有必需的函数、属性吗?使用上述方法不会强制执行make和model的get和set版本。仅添加get make和get模型符合您定义的接口的要求。然而,两者都是必需的。有办法解决这个问题吗?不,这在接口上是不可能的。但我理解你的问题没问题。很高兴知道。谢谢。好的,谢谢。但这不包括接口中的私有属性。如果不在类中将它们设置为私有,则可以将它们包括在接口中。但我需要让他们在课堂上保持隐私。这不可能吗?谢谢。不,您不能成为私有接口成员。有两个公共属性,那么为什么你需要在接口中有私有属性呢?关于你上面提供的方法,接口的目的不是确保类实现所有必需的函数、属性吗?使用上述方法不会强制执行make和model的get和set版本。仅添加get make和get模型符合您定义的接口的要求。然而,两者都是必需的。有办法解决这个问题吗?不,这在接口上是不可能的。但我理解你的问题没问题。很高兴知道。谢谢