使用lambda /箭头函数的TypeScript抽象方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用lambda /箭头函数的TypeScript抽象方法相关的知识,希望对你有一定的参考价值。

我正在使用TypeScript 1.6,并希望使用抽象方法创建一个抽象类,但在具体类中使用lambda /箭头函数。

这可能吗?下面显示的代码没有像它所说的那样编译

“Class'Base'定义实例成员函数'def',但扩展类'Concrete'将其定义为实例成员属性”......

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;
}

你实际上是在property类声明了一个名为defmethod而不是Base

属性不能(不幸的是恕我直言)在Typescript中抽象:https://github.com/Microsoft/TypeScript/issues/4669

另一答案

您可以使用抽象属性:

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 2.0。为了完成这项工作,您需要为箭头函数声明一个类型

type defFuntion = () => void;

然后宣布

abstract class Base {
    abstract abc(): void;
    abstract readonly def: defFuntion;
}

here是此功能的参考

以上是关于使用lambda /箭头函数的TypeScript抽象方法的主要内容,如果未能解决你的问题,请参考以下文章

在 TypeScript 中使用箭头函数:如何使它们成为类方法?

TypeScript的箭头函数

如何在带有 React 的 Typescript/JSX 中使用带有箭头函数的泛型?

typescript 属性默认值使用箭头函数 this指向问题

带有泛型的 Typescript 箭头函数的语法错误

在 ES6/Typescript 中使用带有箭头函数的 _(下划线)变量