Typescript infer function parameters in derived class

≡放荡痞女 提交于 2020-01-04 12:42:49

问题


I noticed that when implementing a generic interface (or class) and explicitly stating the types of those generics, the parameter types for functions inside the subclass are not inferred.

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

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

The current correct way to do this would be the following:

open(data: string) {
    ...
}

However, this forces me to enter the type multiple times which seems unnecessary. The following produces an error (which is expected):

open(data: number) {
    ...
}

Any type that isn't string gives an error, so shouldn't the compiler be able to infer that the type is string?


回答1:


This is a known issue in TypeScript that may be fixed at some point.




回答2:


As the other answer says, this is known issue with TypeScript compiler.

There is a way to provide implementation of MyInterface for which method parameters will be inferred, you just have to use a function that returns an object instead of a 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;
        }
    }
}


来源:https://stackoverflow.com/questions/52123541/typescript-infer-function-parameters-in-derived-class

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!