网站搜索

Typescript:类型方法参数实现基类


我正在使用 TypeScript,并且我想为一个 MyClass 类创建一个接口或类型。我想能够为 MyClass 的方法的输入参数定义类型,所以我实现了一个 BaseClass,它为输入和输出值使用了一些类型。问题是,当我悬停在 myClass 的方法参数上时——例如 MyClass 的 methodOne 的 myString——类型显示为 any,而实际应该是 string。

type ComplexObject1 = {
  myString: string;
};

type ComplexObject2 = {
  myNumber: number;
};

interface BaseClass {
  methodOne: (params: ComplexObject1) => number;
  methodTwo: (params: ComplexObject2) => string;
}

class MyClass implements BaseClass {
  methodOne({ myString }) {
    return myString.length;
  }
  methodTwo({ myNumber }) {
    return String(myNumber);
  }
}

我也尝试将 BaseClass 设置为接口或抽象类,或者用不同语法的方法,结果都一样:

type BaseClass = {
  methodOne: (params: ComplexObject1) => number;
  methodTwo: (params: ComplexObject2) => string;
};

或者

abstract class BaseClass {
  methodOne: (params: ComplexObject1) => number;
  methodTwo: (params: ComplexObject2) => string;
}

或

interface BaseClass {
  methodOne(params: ComplexObject1): number;
  methodTwo(params: ComplexObject2): string;
}

我在这里做错了什么?

编辑:这个问题被提出作为一个答案:Typescript:将类作为接口使用。这是一篇有趣的读物,但它并没有回答如何为每个方法的输入参数指定类型的问题。

编辑2:这是我能想到的唯一解决方案,但并不令人满意;我本希望使用抽象类或接口来实现/扩展,而不是单独的函数类型:

type ComplexObject1 = {
  myString: string;
};

type ComplexObject2 = {
  myNumber: number;
};

type MyClassMethodOne = (params: ComplexObject1) => number;
type MyClassMethodTwo = (params: ComplexObject2) => string;

class MyClass {
  methodOne: MyClassMethodOne = ({ myString }) => {
    return myString.length;
  };
  methodTwo: MyClassMethodTwo = ({ myNumber }) => {
    return String(myNumber);
  };
}