参数在 TS 中不能有问号和初始值设定项
Parameter cannot have question mark and initializer in TS
为解决 TypeScript 中“Parameter cannot have question mark and initializer”错误,在使用等号提供默认值时,不要使用问号将参数设置为可选。
具有默认值的参数暗示是可选的。
下面是错误如何发生的示例。
// ⛔️ Error: Parameter cannot have question mark and initializer.ts(1015) function sum(a: number, b? = 10) { return a + b; }
问题是我们为参数提供默认值并将其标记为可选,这是隐含的。
去掉问号解决错误
要解决该错误,请删除参数名称旁边的问号。
function sum(a: number, b = 10) { return a + b; } console.log(sum(5)); // 👉️ 15 console.log(sum(5, 5)); // 👉️ 10 // ✅ With object parameter function getPerson({ name = 'Boby Hadz', age, }: { name?: string; age: number; }) { return { name, age }; } console.log(getPerson({ age: 30 }));
该b
参数的默认值为10
。TypeScript 已经知道该参数是可选的,因为我们提供了一个初始化程序。
function sum(a: number, b = 10) { return a + b; } console.log(sum(5)); // 👉️ 15
如果在sum
没有参数值的情况下调用该函数b
,则会为其分配默认值10
。
b
参数的类型。TypeScript 可以根据提供的默认值的类型来推断它。将参数标记为可选而不提供默认值
如果需要在不提供默认值的情况下将参数标记为可选,请使用问号。
function sum(a: number, b?: number) { // 👉️ b is number or undefined here if (b !== undefined) { return a + b; } return a + a; } console.log(sum(5)); // 👉️ 10 console.log(sum(5, 5)); // 👉️ 10
我们将b
参数标记为可选。这意味着它
在函数体中可以是 anumber
或具有值。undefined
在必填参数之后声明可选参数
请注意,必需参数不能跟在
可选参数之后,因此您还应该将可选参数声明为最后。
// ⛔️ Error function sum(a?: number, b: number) { if (b !== undefined) { return a + b; } return a + a; }
另一方面,您可以
在函数参数列表的开头有一个默认参数。
function sum(a = 10, b: number) { return a + b; } console.log(sum(undefined, 10)); // 👉️ 20 console.log(sum(15, 10)); // 👉️ 25
如果要使用位于函数参数列表开头的默认参数的默认值,请undefined
为其传递一个值。
将对象的属性标记为可选
如果您有对象参数并使用默认值,则必须在类型声明中将属性标记为可选。
// ✅ With object parameter function getPerson({ name = 'Bobby Hadz', age, }: { name?: string; age: number; }) { return { name, age }; } console.log(getPerson({ age: 30 }));
Note that even though we provided a default value for the name
property, we
still had to mark it as optional when typing the object.
If you want to set a default value for an entire object, you can type the object
and provide a default value after.
function sum({ a, b }: { a: number; b: number } = { a: 10, b: 5 }) { return a + b; } console.log(sum()); // 👉️ 15
Notice that we provided a default value for the object parameter as a whole and
not for each property.
When providing a default value for the object parameter, you should do it by
using an equal sign =
right after the parameter’s type.
# Additional Resources
You can learn more about the related topics by checking out the following
tutorials: