Open
Description
Before You File a Proposal Please Confirm You Have Done The Following...
- I have searched for related issues and found none that match my proposal.
- I have searched the current rule list and found no rules that match my proposal.
- I have read 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
If a file exports a construct that relies on some other types, but doesn't export those other types, it can be difficult for other files to declare types based on the construct.
For example, suppose a ./somewhere
file exports a doSomething
function with a single parameter of type SomeSettings
, but doesn't export SomeSettings
. What if a consuming file wants to declare a local/parameter of that same SomeSettings
type? There'd be no easy way to refer to SomeSettings
.
import { doSomething } from "./somewhere";
export function callDoSomethingAndLog(settings: Parameters<typeof doSomething>[0]) {
doSomething(settings);
console.log("Done!");
}
I see this a lot in definitions for libraries. Example: saurabhnemade/react-twitter-embed#132
Fail Cases
interface SomeSettings {
something: string;
}
export function something(settings: SomeSettings) {
// ...
}
Pass Cases
export interface SomeSettings {
something: string;
}
export function something(settings: SomeSettings) {
// ...
}
Additional Info
...I could have sworn this was already filed somewhere, but I couldn't find it after a few minutes of searching. 🤷