prefer-minimal-parameter-contract
Prefer the proven read-only subset for a private consumer parameter.
Why
A private scalar consumer can unnecessarily require data it never reads. Removing unused required fields accepts more structural values while preserving the original runtime object and producer information.
Fix
Review a smaller existing contract, Pick or interface containing the read fields and preserving readonly and optional modifiers. Change the consumer annotation; a new runtime projection has different identity and allocation costs. The safe fix removes only proven unused required property signatures from the private inline annotation; producer objects, calls and function bodies remain unchanged.
Examples
export {};const account = { name: "Ada", email: "a" };const prefix = "Hello ";function label(prefix: string, user: { email: string; name: string }): string { return prefix + user.name;}label(prefix, account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}export {};const account = { name: "Ada", email: "a" };const prefix = "Hello ";function label(prefix: string, user: { email: string; name: string }): string { return prefix + user.name + user.email;}label(prefix, account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}Autofix output
export {};const account = { name: "Ada", email: "a" };const prefix = "Hello ";function label(prefix: string, user: { name: string }): string { return prefix + user.name;}label(prefix, account);export {};const account = { name: "Ada", email: "a" };function formatName(name: string): string { return name.toUpperCase();}function label(user: { email: string; name: string }): string { return formatName(user.name);}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}export {};const account = { name: "Ada", email: "a" };function formatName(name: string): string { return name.toUpperCase();}function label(user: { email: string; name: string }): string { return formatName(user.name) + user.email;}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}Autofix output
export {};const account = { name: "Ada", email: "a" };function formatName(name: string): string { return name.toUpperCase();}function label(user: { name: string }): string { return formatName(user.name);}label(account);export {};const account = { name: "Ada", email: null };function label(user: { email: string | null; name: string }): string { return user.name;}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}export {};const account = { name: "Ada", email: null };function label(user: { email: string | null; name: string }): string { return user.email ?? user.name;}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}Autofix output
export {};const account = { name: "Ada", email: null };function label(user: { name: string }): string { return user.name;}label(account);export {};const account = { name: null, email: "a" };function label(user: { readonly email: string; readonly name: string | null }): string { return user.name ?? "";}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}export {};const account = { name: null, email: "a" };function label(user: { readonly email: string; readonly name: string | null }): string { return user.name ?? user.email;}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}Autofix output
export {};const account = { name: null, email: "a" };function label(user: { readonly name: string | null }): string { return user.name ?? "";}label(account);export {};const account = { name: "Ada", email: "a" };function label(user: { readonly email: string; readonly name: string }): string { return user.name;}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}export {};const account = { name: "Ada", email: "a" };function label(user: { readonly email: string; readonly name: string }): string { return user.name + user.email;}label(account);{ "compilerOptions": { "strict": true, "target": "ESNext", "module": "ESNext", "moduleResolution": "Bundler" }}Autofix output
export {};const account = { name: "Ada", email: "a" };function label(user: { readonly name: string }): string { return user.name;}label(account);