type Foo = { x: number; }; function g(): Foo { return {}; // Fails type-check // Property 'x' is missing in type '{}' but required in type 'Foo'. } function f(): Foo { return Object.create({}); // Passes! } function h(): Foo { return Object.create({x: 0}); // Also passes } function j(): Foo { return Object.create({x: "Hi"}); // Also passes! }
Why do f
and j
pass type-checking? Is it possible to configure TypeScript so that h
passes type-checking but f
and j
fail?
Advertisement
Answer
Object.create
is designed to return any
by Typescript.
There has been an issue in Typescript’s Github repository but it’s closed and they do not intend to change it soon.