好吧,想通了。在我发布这个问题后,我继续谷歌搜索,大约一个小时后,我在 StrongLoop 上看到了 Sequoia McDowell 写的这篇文章:https://strongloop.com/strongblog/type-hinting-in-javascript/ https://strongloop.com/strongblog/type-hinting-in-javascript/
我非常密切地关注它,并使用“typings”包,我能够在项目的根目录下初始化一个“typings”文件夹。该文件夹的内容现在如下所示:
typings/
├── models/
│ └── myObject.d.ts
└── index.d.ts
该index.d.ts 文件的内容如下所示:
/// <reference path="models/myObject.d.ts" />
myObject.d.ts 文件的内容看起来有点像这样:
declare namespace MyProject {
export interface MyObject {
aString?: string;
anotherString?: string;
aComplexType?: ComplexType;
}
interface ComplexType {
aString?: string;
anotherComplexType: SecondComplexType;
}
interface SecondComplexType {
aString?: string;
}
}
完成后,我必须开始使用 JSDoc 标记该对象的实例。该文档主要采用两种形式:
/**
* Creates an instance of UtilityThing.
* @param {MyProject.MyObject} myObject
*
* @memberof UtilityThing
*/
constructor(myObject) {
this.myObject = myObject;
}
/**
* @param {MyProject.MyObject} myObject
* @returns {MyProject.MyObject}
*/
function noOp(myObject) {
return myObject;
}
and
/** @type {MyProject.MyObject} */
const myObject = containerObject.myObject;
通过此设置以及 VSCode 的最新公开版本,我能够在当前正在编辑的 ES6 *.js 文件中看到错误,这些错误告诉我哪些属性不存在,哪些属性被分配了错误类型的值,哪些属性不存在,哪些属性被分配了错误类型的值,哪些属性不存在,哪些属性被分配了错误类型的值被认为是错误的类型,等等。
到一半了。
经过更多研究后,我发现这并不是 VSCode 的独特功能。他们似乎正在使用“tslint”或其某些定制版本。利用这些知识,我将“tslint”添加到项目中并制定了这个 npm 脚本:
"tslint": "tslint --type-check --project tsconfig.json"
以下是我找到的 tsconfig.json 的内容,尽管我不完全确定是否需要所有这些选项。
{
"compilerOptions": {
"target": "es6",
"allowJs": true,
"noResolve": true,
"checkJs": true,
"moduleResolution": "node",
"types": [
"node"
]
},
"exclude": [
"node_modules",
"coverage",
"lib",
"spec"
]
}
使用 tsconfig.json 和“typings”文件夹中的类型定义文件运行此“tslint”脚本,使我能够使用正确的 JSDoc 对项目中的所有文件中的一种特定对象类型进行类型检查。我确实遇到了小问题 https://github.com/palantir/tslint/issues/2568但这似乎是大约一个小时前修复并合并的,巧合的是。除了对对象字段进行类型检查之外,这还揭示了几个位置,其中属性被过早地从其后代实际上具有该属性的对象中提取。很酷。
TL;DR:这是可以做到的,非常感谢 Sequoia McDowell 的那篇文章,它终于让我走上了正轨。