While debugging my program, I noticed that the following example yields a compile error (детская площадка).
type Foo = {key: string};
interface Bar {key: string};
type Baz = Foo extends Record<string, unknown>? any: never;
type Qux = Bar extends Record<string, unknown>? any: never;
const baz: Baz = 0;
const qux: Qux = 0; // Type 'number' is not assignable to type 'never'.
Кажется, интерфейсы не могут расширять Record<string, unknown>
, тогда как типы могут. Я знаю, что между типами и интерфейсами в TypeScript есть несколько различий, и я подозреваю, что тот факт, что сопоставленные типы нельзя использовать в интерфейсах, может объяснить такое поведение. Я не могу полностью понять, почему это ограничение типа карты приводит к тому, что Qux
становится never
, даже если это так.
Кроме того, interface Foobar extends Record<string, unknown> { key: string };
является допустимым определением интерфейса, что делает ошибку более запутанной для меня.
Может ли кто-нибудь помочь мне понять эту ошибку?