Класс Typescript не препятствует типам интерфейса - PullRequest
0 голосов
/ 03 февраля 2019
interface IFoo {
  method: (ha: string) => void;
}

class Foo implements IFoo {
  public method(ha) {}
}

При наведении указателя мыши на параметр 'ha' в методе класса говорится

Параметр 'ha' неявно имеет тип 'any', но лучший тип может быть выведен из использования

Поскольку класс реализует интерфейс, не должен ли он соответствовать типам интерфейса?Если вы попытаетесь присвоить параметру 'ha' тип, отличный от строки, скажем, number, it, то это приведет к ошибке, что он не может быть назначен для типа string, что имеет смысл.

Итак, зачем мне назначать типха и в интерфейсе и в своем классе?Это предполагаемое поведение?

1 Ответ

0 голосов
/ 03 февраля 2019

В настоящее время TypeScript не поддерживает это.

Подробнее об этом можно узнать здесь: https://github.com/Microsoft/TypeScript/issues/23911

Это не простая задача.

Это потому, чтоTypeScript построен поверх JavaScript и не имеет разрешения интерфейса, как у других языков, таких как C #.

Чтобы дать вам базовую идею, представьте, что у вас есть два интерфейса X и Y, оба имеют одинаковый методно разные типы:

interface X { foo(i: string): string }
interface Y { foo(x: number): number }

При создании класса, который реализует оба этих интерфейса, вы не можете просто объединить интерфейсы, как показано ниже:

class K implements X, Y {
  // error: this does not satisfy either interfaces.
  foo(x: number | string): number | string {
    return x
  }
}

Для этого простого примера вам понадобитсяto:

class K implements X, Y {
  foo(x: number): number
  foo(x: string): string
  foo(x: number | string): number | string {
    return x
  }
}

И даже это не идеально, потому что не требует, чтобы тип ввода совпадал с типом вывода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...