初始化程序不为此绑定元素提供任何值,并且绑定元素没有默认值
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 中设置默认参数的详细指南。
额外资源
您可以通过查看以下教程了解有关相关主题的更多信息: