为什么类不实现的接口会推断参数类型

时间:2019-09-23 00:58:14

标签: javascript typescript class

实现一些接口和类似这样的类:

interface ISecondParameter {
    fname: string;
    lname: string;
}
interface IReturnValue {
    data: number;
}
const o:IReturnValue = {
    data: 5
}
interface IMyClass {
    param1: string;
    method(a:string, b: ISecondParameter): IReturnValue
}

class MyClass implements IMyClass {
    param1
    |
    └──> Member 'param1' implicitly has an 'any' type.
    constructor() {
    }
    method(a, b){
           |  |
           |  └──> Parameter 'b' implicitly has an 'any' type. 
           └──> Parameter 'a' implicitly has an 'any' type.
        return {
            data: 1
        }
    }
}

获取上面的错误。我可以通过添加类型即

的参数列表来消除method中的错误

method(a: string, b: ISecondParameter) {}

然后将param1放入构造函数中

constructor(public param1: string) {}

但是,这似乎是多余的。我已经在IMyClass的函数签名中指定了参数类型。在TypeScript中是否需要这种冗余?

很明显,编译器理解这种关系,因为

const mc = new MyClass()
const result = mc.method('a string', {secondArg: 'john', doesNotConform: 'doe'})

会出现错误。

Playground

消除这种错误而不用重复输入乱码的正确方法是什么?

0 个答案:

没有答案