我正在寻找类似 ESLint 的东西,但它实际上会根据 JSDoc
@param
标签验证类型。我尝试了 ts-node 但它似乎并没有强制执行。例如,这不会抛出:
/**
* Adds
*
* @param {number} numb1
* @param {number} numb2
*
* @returns {number}
*/
function add(numb1, numb2) {
return numb1 + numb2
}
console.log(add('something', '234'))
您可以使用 typescript 检查 javascript 文件内的类型。您必须使用 tsconfig 文件并将“checkJS”标志设置为 true。 https://www.typescriptlang.org/docs/handbook/type-checking-javascript-files.html
根据我的评论并根据您的项目配置,您可以使用Google Closure Compiler。
有一个在线游乐场,人们可以在那里玩耍。以下是编译器在打开高级优化的情况下尝试编译代码时所说的内容。
正如您所看到的,它能够从 JSDoc
@param
标签推断出 add
函数是使用意外的参数类型调用的:
这是使用 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。