使用 lambda/arrow 函数的 TypeScript 抽象方法
TypeScript abstract method using lambda/arrow function
我正在使用 TypeScript 1.6 并想用抽象方法创建一个抽象 class 但在具体 class.
中使用 lambda/arrow 函数
这可能吗?下面显示的代码不会像它所说的那样编译
"Class 'Base' defines instance member function 'def', but extended class 'Concrete' defines it as instance member property"...
abstract class Base {
abstract abc(): void;
abstract def(): void;
}
class Concrete extends Base {
private setting: boolean;
public abc(): void {
this.setting = true;
}
public def = (): void => {
this.setting = false;
}
}
我对 Typescript 规范的理解是,当你声明时
public def = (): void => {
this.setting = false;
}
您实际上是在 Base
class.
上声明一个名为 def
的 property
而不是 method
不能(不幸的是恕我直言)在 Typescript 中抽象属性:https://github.com/Microsoft/TypeScript/issues/4669
您可以从 typescript 2.0 开始执行此操作。为了完成这项工作,您需要为箭头函数声明一个类型
type defFuntion = () => void;
然后声明
abstract class Base {
abstract abc(): void;
abstract readonly def: defFuntion;
}
here 是此功能的参考
您可以使用摘要 属性:
abstract class Base {
abstract def: () => void; // This is the abstract property
}
class Concrete extends Base {
private setting: boolean;
public def = (): void => {
this.setting = false;
}
}
var myVar: Base = new Concrete();
myVar.def();
console.log((myVar as any).setting); // gives false
我正在使用 TypeScript 1.6 并想用抽象方法创建一个抽象 class 但在具体 class.
中使用 lambda/arrow 函数这可能吗?下面显示的代码不会像它所说的那样编译
"Class 'Base' defines instance member function 'def', but extended class 'Concrete' defines it as instance member property"...
abstract class Base {
abstract abc(): void;
abstract def(): void;
}
class Concrete extends Base {
private setting: boolean;
public abc(): void {
this.setting = true;
}
public def = (): void => {
this.setting = false;
}
}
我对 Typescript 规范的理解是,当你声明时
public def = (): void => {
this.setting = false;
}
您实际上是在 Base
class.
def
的 property
而不是 method
不能(不幸的是恕我直言)在 Typescript 中抽象属性:https://github.com/Microsoft/TypeScript/issues/4669
您可以从 typescript 2.0 开始执行此操作。为了完成这项工作,您需要为箭头函数声明一个类型
type defFuntion = () => void;
然后声明
abstract class Base {
abstract abc(): void;
abstract readonly def: defFuntion;
}
here 是此功能的参考
您可以使用摘要 属性:
abstract class Base {
abstract def: () => void; // This is the abstract property
}
class Concrete extends Base {
private setting: boolean;
public def = (): void => {
this.setting = false;
}
}
var myVar: Base = new Concrete();
myVar.def();
console.log((myVar as any).setting); // gives false