-
Notifications
You must be signed in to change notification settings - Fork 13.1k
Description
TypeScript Version: 3.3.0-dev.20190108
Search Terms: noimplicitany infer code fix codefix quick suggested object literal primitive
Code
function checkEnd(text) {
text.length;
text.indexOf("z");
text.charAt(0);
}Expected behavior:
--noImplicitAny suggested fix on the text parameter:
checkEnd(text: string) {Actual behavior:
function checkEnds(text: { length: any; indexOf: (arg0: string) => void; charAt: (arg0: number) => void; }) {Related Issues: #13243 (parent tracking quick fixes); #28991 for similar issues with interfaces/types
At what point can TypeScript be confident something is a string, number, array, etc.? In the above case of a parameter whose usages match up to exactly one built-in primitive (string here), can it be inferred to that primitive instead of a very long anonymous object type that happens to be a subset of the primitive's?
Proposal: If a --noImplicitAny fix would add in an anonymous object type that is a subset of exactly one built-in primitive type, such as number, string, or boolean, it should add that primitive type instead.