Параметры функции вывода Typescript в производном классе - PullRequest
0 голосов
/ 01 сентября 2018

Я заметил, что при реализации универсального интерфейса (или класса) и явном указании типов этих обобщений типы параметров для функций внутри подкласса не выводятся.

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) {
    ...
}

Любой тип, не являющийся строковым, выдает ошибку, поэтому не должен ли компилятор сделать вывод, что тип является строковым?

Ответы [ 2 ]

0 голосов
/ 01 сентября 2018

Как говорит другой ответ, это известная проблема с компилятором TypeScript.

Существует способ обеспечить реализацию MyInterface, для которой будут выведены параметры метода, вам просто нужно использовать функцию, которая возвращает объект вместо класса:

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;
        }
    }
}
0 голосов
/ 01 сентября 2018

Это известная проблема в TypeScript , которая может быть исправлена ​​в некоторый момент.

...