是否可以在TypeScript中使用带有ES6类getter、setter和私有属性的接口
我正在使用TypeScript,并且我正在尝试解决如何在使用ES6 getter和setter的类中实现接口 这可能吗?使用下面的代码突出显示类中的错误 例如: (属性)SportsCar.make:string是否可以在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:
类型“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模型符合您定义的接口的要求。然而,两者都是必需的。有办法解决这个问题吗?不,这在接口上是不可能的。但我理解你的问题没问题。很高兴知道。谢谢