Утверждение типа Typescript - PullRequest
       22

Утверждение типа Typescript

0 голосов
/ 05 декабря 2018

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

например:

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

Это

let foo: Foo = {} as any;

то же самое с

let foo: Foo | any = {};

* * 1013

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

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

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

Итак

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

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

0 голосов
/ 05 декабря 2018

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

Первый

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

let foo: Foo = {} as any;

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

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

Второй

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

let foo: Foo | any = {};
foo = {}; // OKAY!
...