Open
Description
TypeScript Version: 3.4.0-dev.20190202
Search Terms:
object dynamic keys callback implicit any
duplicate dynamic object key typing
Code
// PLEASE ENABLE => noImplicitAny
type Keys = 'a' | 'b' | 'c';
type Shape = { [K in Keys]?: K extends string ? (key: K) => K : never };
const getC = () => 'c' as 'c';
export const obj: Shape = {
['a']: key => key, // OK => inferred correctly
['b' as 'b']: key => key, // Error => inference broken "any" type
[getC()]: key => key, // Error => inference broken "any" type
[getC()]: key => key, // Error => inference broken "any" type instead of Duplicate identifier
['a']: key => key, // OK => Duplicate identifier as expected
};
Expected behavior:
- No implicit any error, but correct type assignation
- Detect duplicate identifier in case of non-explicit literal string key
Actual behavior:
- When not using an explicit literal string as an object-key, TypeScript cannot infer correctly the value.
- In a same way, TypeScript cannot detect duplicate identifier
Related Issues: