Простой пример кода:
type Foo = { foo: string };
type FooBar = { foo: string; bar: number };
let a: Foo;
// Doesn't work
a = { foo: 'x', bar: 1 };
/*
Type '{ foo: string; bar: number; }' is not assignable to type 'Foo'.
Object literal may only specify known properties, and 'bar' does not exist in type 'Foo'.
*/
// However this works: (temp variable with implicit type)
let b = { foo: 'x', bar: 1 }; // According to VSCode the inferred type for `b` is exactly `{ foo: string; bar: number; }`
a = b;
// This also works: (temp variable with explicit type)
let c: FooBar = { foo: 'x', bar: 1 };
a = c;
Это меня очень удивляет. То, что я ожидал, является ошибкой во всех трех случаях. Мне очень нравится идея « Object литерал может указывать только известные свойства ».
# 1 Почему это происходит?
# 2 Как я могу настроить TypeScript, чтобы не допустить этого «обходного пути»?