Closed
Description
TypeScript Version: 3.2.2 and 3.3.0-dev.20190119
Search Terms: arrow function method object literal
Code
type Test<K extends keyof any> = {
[P in K | "foo"]: P extends "foo" ? true : () => any
}
function test<T extends Test<keyof T>>(arg: T) {
return arg;
}
const res1 = test({
foo: true,
bar() {
// Notice the type param of `test` is inferred as `Test<never>`
}
})
const res2 = test({
foo: true,
bar: function () {
// Same error here.
}
})
const res3 = test({
foo: true,
bar: () => {
// This is fine.
}
})
Expected behavior: The first two test
calls should infer the given object type correctly.
Actual behavior: They instead infer the object type as Test<never>
. 😢
Playground Link: Click here
Related Issues: #17867 (sort of)