打字稿编译器中的对象 shorthand 语法

object shorthand syntax in typescript compiler

interface o {
  name: string
}
const func = (obj: o): boolean => true

// this should throw error message.(or warning message at least, but it doesn't)
func({ name })

name 在我写的代码中没有定义,所以 func({ name }) 我认为应该抛出一个错误。这是故意的吗?
我可以用 eslint 或 tsc config 解决这个问题吗?


编辑:这不是重复的
我在 node 并且 Global.name 未定义。
似乎 tsc 认为 name 是字符串。

我的tsconfig.json:

{                                                                                                                                                                               
  "compilerOptions": {                                                                                                                                                          
     "experimentalDecorators": true,                                                                                                                                             
     "emitDecoratorMetadata": true,                                                                                                                                              
     "skipLibCheck" : true,                                                                                                                                                      
     "rootDir": "./src",                                                                                                                                                         
     "outDir": "./src/js"                                                                                                                                                        
   }                                                                                                                                                                             
}

TypeScript 在 lib.dom.d.ts 中声明了一个名为 name 的全局变量,因为 window.name.

name 声明为 never 类型,但这并不妨碍它成为一个问题。在 Github 上有一个关于将其类型更改为 void 的讨论,在这种情况下,您的示例中会出现错误。解决方法是使用 no-restricted-globals.

规则配置 ESLint

但是,由于您是为 Node.js 编译的,因此实际上有更好的解决方案。因为您不需要 DOM API 的任何类型定义,所以最好根本不包含 lib.dom.d.ts

您可以通过在 tsconfig.json 中明确指定 lib compiler option 来做到这一点:

{
    "compilerOptions": {
        "lib": [
            "ES5"
        ]
    }
}

Note: the exact value for lib you'll need depends on your project. See the compiler options documentation for all available values and the defaults for different targets