Typescript предотвращает утверждения к супертипу - PullRequest
0 голосов
/ 20 июня 2019

Существует ли флаг компилятора Typescript, чтобы следующий код не компилировался?

interface A {
    key: number
}    
var B = {} as A;

Для любых случаев, когда тип A расширяет B. Так, что для вышеупомянутой компиляции ему пришлось быиспользуйте двойное утверждение: var B = {} as any as A;

Некоторые другие примеры этого сценария, где A расширяет B, но разрешено утверждать, что B имеет тип A.

class A {
    public key = 1;
}
var B = {} as A;               // Would not want to compile

declare var A: number | null;
var B = A as number;           // Would not want to compile

1 Ответ

0 голосов
/ 20 июня 2019

Я не совсем уверен, какова ваша конечная цель, но я могу объяснить, почему компилируется следующий код:

interface A {
    key: number
}    
var B = {} as A;

В TypeScript есть структурная система типов.Вы используете пустой объект {}, который совместим с любым другим типом.Поэтому ошибок нет.

Тем не менее, попробуйте лучше описать свои цели.

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