type {}
Consider the object type { id: number, name: string }
, which represents a 2-field object. Legal values of this type include { id: 1, name: "Foo" }
and { id: 2, name: "Bar" }
.
The type object {}
represents a 0-field object. The only legal value of this type is an empty object: {}
.
So the value { id: 1, name: "Foo" }
is of type { id: number, name: string }
, and the value {}
(i.e. an empty object) is of type {}
.
The error
The error seems to be a bug in the TypeScript compiler (I submitted an issue here). It fails to infer the type arguments in the call to call
. You can work around this by explicitly specifying the type arguments:
let the_answer: number = call<number, NoArgsFn<number>>(get_the_answer);
But it's simpler and more straightforward to use a single type argument instead, as @NitzanTomer suggested:
function call<T>(fn: NoArgsFn<T>): T {
return fn();
}
EDIT: I issue I submitted was closed as a duplicate of #7234 which is to be fixed before the release of TypeScript 2.0.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…