Странное поведение компилятора Typescript, когда интерфейс не подходит - PullRequest
1 голос
/ 13 июня 2019

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

Например, это прекрасно работает, как и предполагалось.Нет ошибки компилятора, ничего.

interface Bar {
  letter: 'a' | 'b';
}

declare class Foo {
  constructor(bars: Bar[]);
}

const foo = new Foo([
  {
    "letter": "a"
  },
  {
    "letter": "b"
  }
]);

Но если я добавлю ненужный параметр в один из Bar, как здесь:

const foo = new Foo([
  {
    "letter": "a"
  },
  {
    "letter": "b"
    "what": 175875,
  }
]);

Затем компилятор выдаст эту неожиданную ошибку оба моих letter параметров:

Type 'string' is not assignable to type '"a" | "b"'.

Я что-то упустил или это какая-то проблема с компилятором?

1 Ответ

1 голос
/ 13 июня 2019

это не ошибка компилятора, это было похоже на TypeScript 1.6, смотрите это: Breaking Changes |Строгая проверка буквального присваивания объекта

вам нужно сказать машинописи, что интерфейс может иметь больше таких свойств:

interface Bar {
  letter: 'a' | 'b';
  [x: string]: any;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...