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



我正在使用TypeScript,并试图在使用ES6 getter和setter的类中实现接口。

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

例如:

(property(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;

使用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;

最后,在使用接口时,是否可以将类属性设置为私有?接口似乎不允许您定义这一点,如果使用下面的代码,我会在VS代码中得到以下错误。

代码:

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"。属性"_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
}
}

你可以在这里试试。

最新更新