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