使用 Typescript 时出现“属性...在类型上不存在...”错误

Dan*_*ace 9 javascript typescript tsc

使用打字稿编译文件时出现错误:

Property 'qaz' does not exist on type '{ bar: string; }'.
Run Code Online (Sandbox Code Playgroud)

文件中包含以下代码:

let foo = {
    bar: "Can you perform a Quirkafleeg?"
}

let { qaz = "I'm feeling manic!" } = foo;
console.log(qaz);
console.log(qaz.bar);
Run Code Online (Sandbox Code Playgroud)

基于页面上的示例代码:https://zellwk.com/blog/es6/ “解构对象”部分。

我本来希望得到第二个字符串作为输出,但我有点困惑,因为该页面上还有另一个示例:

let { fizz: faz = "Eugene was my friend." } = foo; // as defined above
console.log(fizz);
console.log(fizz.faz);
Run Code Online (Sandbox Code Playgroud)

这给出了类似的错误:

Property 'fizz' does not exist on type '{ bar: string; }'.
Run Code Online (Sandbox Code Playgroud)

And*_*rei 1

这不是解构对象的工作原理。

本质上,它将查看子属性foo并为其分配新变量

必须与属性名称匹配foo

例如

const Zell = {
  firstName: 'Zell',
  lastName: 'Liew'
}

let { firstName, lastName } = Zell

console.log(firstName) // Zell
console.log(lastName) // Liew
Run Code Online (Sandbox Code Playgroud)

要修复您的示例,您需要执行以下操作

let foo = {
    bar: "Can you perform a Quirkafleeg?"
}

let { bar } = foo;
console.log(bar);
Run Code Online (Sandbox Code Playgroud)

当您尝试访问栏上的“qaz”时,它不能访问,因为它barString

编辑:

在您的示例中扩展

let { qaz = "I'm feeling manic!" } = foo;当您qaz通过分配一个值时,=如果在对象 foo 上找不到它,它实际上只是一个默认值。

在你的例子中

let { fizz: faz = "Eugene was my friend." } = foo;您试图分配fizz给 的值 foo.faz,如果fizz不存在,foo它将默认为“尤金是我的朋友”。