Javascript JSDoc类型脚本检查命名的默认参数
鉴于以下情况Javascript JSDoc类型脚本检查命名的默认参数,javascript,typescript,jsdoc,checkjs,Javascript,Typescript,Jsdoc,Checkjs,鉴于以下情况 /** *@param{{bar?:字符串| null}}[param0] */ 常量foo=({bar=null}={})=>bar; Typescript 3.7.2报告 var条:字符串|空 绑定元素“bar”隐式具有“any”类型。ts(7031) JavaScript代码按我所希望的方式工作,但我如何编写jsdoc提示,以便TypeScript理解解构的bar变量是string | null而不是any?用正确答案更新 发现的问题实际上是您的tsconfig以及Java
/**
*@param{{bar?:字符串| null}}[param0]
*/
常量foo=({bar=null}={})=>bar;
Typescript 3.7.2报告
var条:字符串|空
绑定元素“bar”隐式具有“any”类型。ts(7031)
JavaScript代码按我所希望的方式工作,但我如何编写jsdoc提示,以便TypeScript理解解构的bar
变量是string | null
而不是any
?用正确答案更新
发现的问题实际上是您的tsconfig以及JavaScript类型检查如何使用它。导致您的配置与我的配置不同的选项是strict
属性。根据报告:
启用--strict
可启用--noImplicitAny
,--noImplicitThis
,--alwaysStrict
,--strictBindCallApply
,--strictNullChecks
,--strictFunctionTypes
和--strictPropertyInitialization
将这些选项添加到我的tsconfig
,我发现禁用其中两个选项可以消除报告的错误。这些选择是:
--strictNullChecks
(因为没有--strictPropertyInitialization
选项,无法启用它)--strictNullChecks
bar
变量注册为string | null
类型
得出这个结论,这可能是JavaScript类型检查中的一个错误,以及它如何使用这些选项,尽管这些选项似乎都与本例无关
编辑:
我已经检查过了,TypeScript repo上似乎已经记录了一个bug:
以前的解决方案(不起作用)
你应该能够很容易地做到这一点。也许可以删除jsdoc注释中参数名称的方括号。这个例子很好:
/**
* @param {{bar?: number|null}} _
*/
const foo = ({ bar = null } = {}) => {
// do stuff with bar
}
我的tsconfig如下所示:
{
"compilerOptions": {
"checkJs": true,
"allowJs": true,
"outDir": "node_modules/.tmp/",
"noImplicitAny": true
},
"include": [
"index.js"
]
}
以下是回购协议,其中包含以下代码,您也可以使用这些代码检查您的回购协议:
测试该脚本的TypeScript版本是3.7.2
编辑:
看看方括号和非方括号,看起来没什么关系。TSC对这两种方式都没有问题。我仍然看到上面的警告。Typescript 3.7.2 tsconfig
json{“compilerOptions”:{“allowJs”:true,“checkJs”:true,“module”:“commonjs”,“strict”:true,“noEmit”:true,“lib”:[“es2018”],“target”:“es2018”},“include”:[“/src/****”],“compileOnSave”:true}
我意识到它实际上与TypeScript的版本没有多大关系,但与配置有关。我将用我在挖掘您的tsconfig
时发现的内容更新答案,并提供选项感谢您提供完整的答案。你是最棒的!