TypeScript Version: reproducible in at least 3.3.3333 and above
Search Terms: Array map generic extra property
Code
typeToken={value: string}constthings=['one','two'];// using .map generic — doesn't fail typecheckingfunctiongetTokens1(){returnthings.map<Token>(thing=>({value: thing,// should say `somethingElse` does not exist on type `Token`somethingElse: true}));}// using return type — doesn't fail typecheckingfunctiongetTokens2(): Token[]{consttokens=things.map(thing=>({value: thing,// should say `somethingElse` does not exist on type `Token`somethingElse: true}));// type of tokens is reported as `{ value: string; somethingElse: boolean; }[]`// so how could it be compatible with `Token[]`?returntokens;}// following use cases as working proofs and potential workarounds// fails typechecking correctlyconsttoken: Token={value: 'one',somethingElse: true// `somethingElse` does not exist on type `Token`};// fails typechecking correctly — potential workaroundfunctiongetTokens3(){// note the `Token` inline return typereturnthings.map((thing): Token=>({value: thing,somethingElse: true// `somethingElse` does not exist on type `Token`}));}Expected behavior:
I would expect in getTokens1 using the .map<U> generic form that it would typecheck what .map returns. Similarly, I would expect in getTokens2 that it would complain as I am precising the return type of the function and the inference itself seems to show an incompatible type.
Actual behavior:
It doesn't seem to typecheck properly when using Array.map.
Playground Link:See above example in playground
Related Issues:
TypeScript Version: reproducible in at least
3.3.3333and aboveSearch Terms: Array map generic extra property
Code
Expected behavior:
I would expect in
getTokens1using the.map<U>generic form that it would typecheck what.mapreturns. Similarly, I would expect ingetTokens2that it would complain as I am precising the return type of the function and the inference itself seems to show an incompatible type.Actual behavior:
It doesn't seem to typecheck properly when using
Array.map.Playground Link:See above example in playground
Related Issues: