初始值设定项不为此绑定元素提供任何值,并且该绑定元素没有默认值

初始化程序不为此绑定元素提供任何值,并且绑定元素没有默认值

Initializer provides no value for this binding element and the binding element has no default value

当我们尝试从不包含属性的对象中解构属性时,会出现错误“初始化程序没有为此绑定元素提供任何值,并且绑定元素没有默认值”。

要解决该错误,请为该属性提供默认值。

以下是错误发生方式的 2 个示例。

索引.ts
// ⛔️ Error: Initializer provides no value for this binding element and the binding element has no default value.ts(2525) function greet({ name: yourName } = {}) { return `Hello ${yourName}`; } // ------------------------------------------- // ⛔️ Error const { country } = {};

发生错误是因为我们试图
解构对象上不存在的属性。

为整个对象提供默认值

我们可以通过为属性提供默认值来解决该错误。

索引.ts
function greet({ name: yourName } = { name: 'Bobby Hadz' }) { return `Hello ${yourName}`; } console.log(greet()); // 👉️ "Hello Bobby Hadz" console.log(greet({ name: 'Alice' })); // "Hello Alice" const { country } = { country: 'Germany', };

该示例为定义了特定属性的整个对象提供了默认值。

现在我们可以调用该greet函数而无需向其传递任何参数,甚至不需要空对象

为特定属性提供默认值

或者,您可以为特定属性提供默认值。

索引.ts
function greet({ name: yourName = 'Bobby Hadz' }) { return `Hello ${yourName}`; } console.log(greet({})); // 👉️ "Hello Bobby Hadz" console.log(greet({ name: 'Alice' })); // "Hello Alice" const { country = 'Germany' } = {};

greet当我们想要使用属性的默认值时,必须使用空对象调用该函数name

发生这种情况是因为我们已经为属性设置了默认值name,但没有为整个对象设置默认值。

如果为对象的所有属性提供默认值,则可以设置一个空对象作为整个对象的默认值,以便在调用函数时不必传递空对象。
索引.ts
// 👇️ default value for ALL properties and for object function greet({ name: yourName = 'Bobby Hadz' } = {}) { return `Hello ${yourName}`; } console.log(greet()); // 👉️ "Hello Bobby Hadz" console.log(greet({ name: 'Alice' })); // "Hello Alice" const { country = 'Germany' } = {};

如果最后一行的对象没有属性country,则该
country变量将被分配给Germany

另一方面,如果在对象上定义了属性,它将被分配给变量country

索引.ts
const { country = 'Germany' } = { country: 'Austria' }; console.log(country); // 👉️ "Austria"

country对象的属性
值会覆盖
Germany示例中的默认值。

您还可以使用问号将对象的属性标记为
可选

索引.ts
function greet({ name: yourName }: { name?: string } = {}) { return `Hello ${yourName}`; } console.log(greet()); // 👉️ "Hello undefined" console.log(greet({ name: 'Bobby Hadz' })); // "Hello Bobby Hadz"

name属性被标记为可选。这意味着该属性可以是 astring或 be undefined

我们还提供了一个空对象作为参数的默认值,因此
greet可以在没有任何参数的情况下调用该函数。

如果要将整个对象设置为可选而不设置任何默认值,请确保将对象的所有属性设置为可选。

我还编写了有关
如何在 TypeScript 中设置默认参数的详细指南。

额外资源

您可以通过查看以下教程了解有关相关主题的更多信息: