sindresorhus/eslint-plugin-unicorn

`no-object-as-default-parameter` should ignore for objects with required parameters

已關閉

#2,199 建立於 2023年10月9日

 (0 則留言) (1 個反應) (0 位負責人)JavaScript (468 個分叉)user submission
bughelp wantedtypes

倉庫指標

星標
 (5,022 顆星)
PR 合併指標
 (平均合併 4小時 30分鐘) (30 天內合併 26 個 PR)

描述

Sometimes a method has a required set of option parameters. e.g. min and max.

function valueBetween(range: {min: number, max: number} = { min: 0, max: 10 }) {} ✔️

In this case it should be OK to use object default parameters because both min and max are required. Or to be more precise, it should be ok if defined default properties === required properties. It is not OK if any optional property is provided.

Yes, it it possible for plain JS users to fall through, but they are also likely to fail with the types in general or cause conflicts due to mismatching boundaries:

valueBetween({min: 'a', max: 10}); ❌
valueBetween({min: 100}); ❌

Otherwise it is impossible to implement the method parameter default in a type safe way.

function valueBetween(range: {min: number, max: number} = {} ❌) { // ts-error
    const { min = 0, max = 10 } = options;
}

https://github.com/sindresorhus/eslint-plugin-unicorn/blob/main/docs/rules/no-object-as-default-parameter.md

function valueBetween(range: {min: number, max: number} = { min: 0, max: 10 }) {} :check ✔️
function valueBetween(range: {min: number, max: number, step: number} = { min: 0, max: 10 }) {} ❌
function valueBetween(range: {min: number, max: number, step?: number} = { min: 0, max: 10, step: 1 }) {} ❌

https://github.com/faker-js/faker/blob/fe3fb5dd3b8949d952aa8eb3830f58fc9cc4adcc/src/modules/lorem/index.ts#L377

貢獻者指南