打字稿:实现基类的类型方法参数

问题描述

我正在使用 TypeScript,我想为 MyClass 类创建接口或类型。我希望能够键入 MyClass 的方法的输入参数,因此我实现了一个 BaseClass,它使用一些类型作为输入和输出值。 问题是,当鼠标悬停在myClass的方法参数时,-myString at MyClass methodOne,例如-,类型为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: Use class as interface 这是一个有趣的阅读,但它没有回答如何键入每个方法的输入参数的问题。

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

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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...