Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
Closed
Description
Before You File a Proposal Please Confirm You Have Done The Following...
- I havesearched for related issues and found none that match my proposal.
- I have searched thecurrent rule list and found no rules that match my proposal.
- I haveread the FAQ and my problem is not listed.
My proposal is suitable for this project
- My proposal specifically checks TypeScript syntax, or it proposes a check that requires type information to be accurate.
- My proposal is not a "formatting rule"; meaning it does not just enforce how code is formatted (whitespace, brace placement, etc).
- I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).
Description
Unintuitively, TS narrowstypeof x === 'function'
to the unsafeFunction
type if x is not already constrained. However, it is safe to use on a constrained type. We should report on unconstrained callables.
Fail Cases
declareconstmaybeFunction:unknown;if(typeofmaybeFunction==='function'){// TS allows this.maybeFunction('call','with','any','args');}
Pass Cases
declareconstmaybeFunction:string|(()=>string);if(typeofmaybeFunction==='function'){// TS errors if more args are provided than the declared call signature, so this is safe.maybeFunction();}
Additional Info
it's probably fine/good to allowtypeof x === 'function
as long asx
isn't called. I'm not sure exactly where the line should be drawn between reporting and not reporting. It seems like it should be reported if wepassx
to a function that might expect a specific call signature. Maybe a heuristic could betypeof x === 'function
is ok as long asx
isn't referenced in thetrue
branch of the conditional?