如何设置类方法的类型?

时间:2019-10-06 08:41:50

标签: typescript

我有以下课程:

class Foo {
  handler (mutations) {
    // logic
  }
}

handler方法应该是处理MutationObserver突变的函数。 MutationObserver有内置类型,具体是:

interface MutationCallback {
    (mutations: MutationRecord[], observer: MutationObserver): void;
}

如何告诉TypeScript handler中的Foo应该是MutationCallback

我尝试了

#1

class Foo {
  handler: MutationCallback = function (mutations) {
    // logic
  }
}

但是编译后的代码是这样的:

var Foo = /** @class */ (function () {
    function Foo() {
        this.handler = function (mutations) {
            // logic
        };
    }
    return Foo;
}());

handler被视为实例属性,未在Foo.prototype上设置,我不希望这样。编译后的代码应如下所示:

var Foo = /** @class */ (function () {
    function Foo() {
    }
    Foo.prototype.handler = function (mutations) {
        // logic
    };
    return Foo;
}());

#2

interface Foo {
  handler: MutationCallback
}

class Foo {
  handler (mutations) {
    // logic
  }
}

但是TypeScript给出了错误:

  

重复的标识符“ handler”。

1 个答案:

答案 0 :(得分:0)

您可以为您的Foo类型创建接口,并定义处理程序应为MutationCallback类型

interface IFoo {
    handler: MutationCallback
}


class Foo implements IFoo {
  handler(mutations: MutationRecord[], observer: MutationObserver) {
    // logic
  }
}

interface MutationCallback {
    (mutations: MutationRecord[], observer: MutationObserver): void;
}