问题
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