派生 class 中的打字稿推断函数参数

Typescript infer function parameters in derived class

我注意到当实现泛型接口(或class)并显式声明这些泛型的类型时,subclass 中函数的参数类型不会被推断出来。

interface MyInterface<T> {
    open(data: T): void
}

class MyClass implements MyInterface<string> {
    open(data) {
        // Data should be string, but is any
    }
}

目前正确的做法如下:

open(data: string) {
    ...
}

然而,这迫使我多次输入类型,这似乎是不必要的。以下会产生错误(这是预期的):

open(data: number) {
    ...
}

任何不是字符串的类型都会出错,所以编译器难道不能推断出该类型是字符串吗?

这是一个 known issue in TypeScript,可能会在某个时候修复。

正如其他答案所说,这是 TypeScript 编译器的已知问题。

有一种方法可以提供 MyInterface 的实现,方法参数将被推断出来,您只需要使用 returns 一个对象而不是 class 的函数:

interface MyInterface<T> {
    open(data: T): void
}


function createMyObject(): MyInterface<string> {
    return {
        open(data) { // data type is inferred as string here
            const n = data.length;
        }
    }
}