如何使用 JSDoc 验证/检查类型?

问题描述 投票:0回答:3

我正在寻找类似 ESLint 的东西,但它实际上会根据 JSDoc

@param
标签验证类型。我尝试了 但它似乎并没有强制执行。例如,这不会抛出:

/**
 * Adds
 * 
 * @param {number} numb1
 * @param {number} numb2
 * 
 * @returns {number}
 */
function add(numb1, numb2) {
  return numb1 + numb2
}

console.log(add('something', '234'))
javascript node.js eslint jsdoc
3个回答
3
投票

您可以使用 typescript 检查 javascript 文件内的类型。您必须使用 tsconfig 文件并将“checkJS”标志设置为 true。 https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html


2
投票

根据我的评论并根据您的项目配置,您可以使用Google Closure Compiler

有一个在线游乐场,人们可以在那里玩耍。以下是编译器在打开高级优化的情况下尝试编译代码时所说的内容。

正如您所看到的,它能够从 JSDoc

@param
标签推断出
add
函数是使用意外的参数类型调用的:


0
投票

这是使用 TS 检查 JSDoc 类型的最小设置,灵感来自 HTMX,这是带有 JSDocs 和 TS 的普通 JS。

package.json:

{
  "scripts": {
    "check-types": "tsc --project ./jsconfig.json"
  },
  "devDependencies": {
    "typescript": "^5.4.5"
  }
}

jsconfig.json:

{
  "compilerOptions": {
    "strict": true,
    "noImplicitAny": true,
    "strictFunctionTypes": true,
    "strictPropertyInitialization": true,
    "strictBindCallApply": true,
    "noImplicitThis": true,
    "noImplicitReturns": true,
    "alwaysStrict": true,
    "esModuleInterop": true,
    "checkJs": true,
    "allowJs": true,
    "declaration": true,
    "target": "ES2016",
    "module": "ESNext",
    "moduleResolution": "node",
    "outDir": "dist"
  },
  "include": [
    "./src/**/*.js"
  ],
  "verbose": true
}

src/index.js:

const fn = a => a;
console.log(fn(42));

使用示例:

$ npm i
$ npm run check-types

> check-types
> tsc --project ./jsconfig.json

src/index.js:1:12 - error TS7006: Parameter 'a' implicitly has an 'any' type.

1 const fn = a => a;
             ~


Found 1 error in src/index.js:1

请参阅 this repo,了解一个稍微大一些的示例,其中包含一些 JSDoc linting。

© www.soinside.com 2019 - 2024. All rights reserved.