Хотя при определении типа параметра функции компилятор не выдает ошибку компиляции, когда я передаю неверный тип.

class A
{
  constructor(public data: any)
  {}
};

class B extends A
{
  constructor(instance: A)
  {
    if (B.validate(instance.data))
      super(instance.data)
    else
      throw 'error';
  }

  static validate(instance: A): boolean
  {
    return typeof instance.data == 'number';
  }
}

let a = new A(null);
let b = new B(a);

Строка if (B.validate(instance.data)) неверна, и я ожидаю ошибку компилятора, но она компилируется нормально.

0
Jiří Lechner 20 Авг 2018 в 23:50

3 ответа

Лучший ответ

instance.data имеет тип any, который разрешено передавать там, где ожидается любой тип. Вам нужно будет дать ему более конкретный тип, если вы хотите ошибку компиляции.

3
Matt McCutchen 20 Авг 2018 в 20:54

Если подпись validate взята из экземпляра типа : A , тогда вы не можете передать instance.data ему, вместо этого вы должны передать instance.

-1
felixmosh 20 Авг 2018 в 20:54

Там нет ошибки, потому что data объявлен как тип any. Значения типа any могут использоваться где угодно без ошибок, потому что это задание типа any.

1
Ryan Cavanaugh 20 Авг 2018 в 20:55
51938309