Утверждение типа машинописного текста

Предполагая, что у меня есть интерфейс со многими переменными, и я не хочу инициализировать их все, когда использую его, поэтому я просто помещаю утверждение типа any. Я просто хочу знать, одинаковы ли эти двое или нет:

eg:

export interface Foo {
  a: string;
  b: number;
  c: Bar[];
  d: string;
  e: Bar;
}

Is

let foo: Foo = {} as any;

то же самое с

let foo: Foo | any = {};

?


person superigno    schedule 05.12.2018    source источник


Ответы (2)


Нет. Они не то же самое.

Первый

Следующее безопаснее:

let foo: Foo = {} as any;

Ты не можешь сделать

let foo: Foo = {} as any;
foo = {}; // Error  

Второй

Следующее подвергает вас опасности, например:

let foo: Foo | any = {};
foo = {}; // OKAY!
person basarat    schedule 05.12.2018

Они не одинаковы. Вы должны посмотреть, как компилятор разбивает каждый оператор.

  1. Заявление
  2. Имя переменной
  3. Тип декларатора
  4. Заявленный тип
  5. Назначить символ
  6. Ценить
  7. Оператор приведения
  8. Тип литья

So

 | 1 | 2 |3| 4       |5| 4 | 5 | 6
  let foo : Foo       = {}   as  any;
  let foo : Foo | any = {};

Таким образом, первый оператор не разрешает any в качестве Типа (4) для значения, хранящегося в переменной (2), тогда как второй оператор делает это.

person Erik Philips    schedule 05.12.2018