Я заметил, что при реализации универсального интерфейса (или класса) и явном указании типов этих обобщений типы параметров для функций внутри подкласса не выводятся.
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) {
...
}
Любой тип, не являющийся строковым, выдает ошибку, поэтому не должен ли компилятор сделать вывод, что тип является строковым?