Javascript class 未在 Visual Studio 代码中选取 TypeScript 声明文件
Javascript class not picking up TypeScript declaration file in Visual Studio Code
我有一个 Typescript/JavaScript 混合项目,我正在为一些 JavaScript 文件创建声明 d.ts
文件,以帮助管理多个 类 和子类.
但是 Visual Studio 代码看不到声明的类型。我在同一目录中有 js
和相应的 d.ts
文件。
例如:
我的-class.js
class MyClass {
constructor(options) {}
action(num) {
return num.toString()
}
}
}
我的-class.d.ts
export interface Options {
a: boolean
b: boolean
}
export declare abstract class MyClass {
constructor(options: Options)
action(num: number): string
}
IntelliSense 不获取定义,例如,当我将鼠标悬停在 my-class.js
的 action
方法上时。
我尝试在 my-class.js
的顶部添加参考注释但没有效果 (///<reference path="./my-class.d.ts" />
)。
我在设置中将 checkJs
选项设置为 true
。
我正在使用 VS Code 版本 1.19.1
我还需要采取其他措施才能使其正常工作吗?
确保您的工作文件夹中有 jsconfig.json 文件。有了这个配置文件后,你的 .d.ts 文件应该是 included/reference.
关于你的具体例子,据我所知,它不会像你期望的那样工作。这是因为声明范围。意思是,在你的 .d.ts 文件中你定义了一个 MyClass 类型,然后在你的 .js 文件中你定义了第二个 MyClass ,第二个声明也有类型,它有默认类型 any。如果您继承了第一个 class 那么它可能会像您期望的那样工作。
话虽这么说,有些事情会奏效:
- 您应该在 class
的实例上获得 IntelliSense
- 您可以将 JSDoc 注释添加到您的 .js 文件到 define/link .d.ts 类型
示例:
我的-class.d.ts
declare interface Options {
a: boolean
b: boolean
}
declare class MyClass {
constructor(options: Options)
action(num: number): string
}
我的-class.js
class MyClass {
/**
* @param {Options} options
*/
constructor(options) {
}
action(num) {
return num.toString();
}
}
var foo = new MyClass({ a: true, b: false } );
foo.action(88);
如果您将鼠标悬停在 .js 文件中的 foo 实例上,您会发现您确实获得了正确的 IntelliSense
通过将 JSDoc 注释“@param {Options} options”添加到 constructor() 中,您还将获得正确的 IntelliSense
JSDoc 和 TypeScript:https://github.com/Microsoft/TypeScript/wiki/JsDoc-support-in-JavaScript
VSCode 和类型检查:https://code.visualstudio.com/docs/languages/javascript#_global-variables-and-type-checking
我有一个 Typescript/JavaScript 混合项目,我正在为一些 JavaScript 文件创建声明 d.ts
文件,以帮助管理多个 类 和子类.
但是 Visual Studio 代码看不到声明的类型。我在同一目录中有 js
和相应的 d.ts
文件。
例如:
我的-class.js
class MyClass {
constructor(options) {}
action(num) {
return num.toString()
}
}
}
我的-class.d.ts
export interface Options {
a: boolean
b: boolean
}
export declare abstract class MyClass {
constructor(options: Options)
action(num: number): string
}
IntelliSense 不获取定义,例如,当我将鼠标悬停在 my-class.js
的 action
方法上时。
我尝试在 my-class.js
的顶部添加参考注释但没有效果 (///<reference path="./my-class.d.ts" />
)。
我在设置中将 checkJs
选项设置为 true
。
我正在使用 VS Code 版本 1.19.1
我还需要采取其他措施才能使其正常工作吗?
确保您的工作文件夹中有 jsconfig.json 文件。有了这个配置文件后,你的 .d.ts 文件应该是 included/reference.
关于你的具体例子,据我所知,它不会像你期望的那样工作。这是因为声明范围。意思是,在你的 .d.ts 文件中你定义了一个 MyClass 类型,然后在你的 .js 文件中你定义了第二个 MyClass ,第二个声明也有类型,它有默认类型 any。如果您继承了第一个 class 那么它可能会像您期望的那样工作。
话虽这么说,有些事情会奏效:
- 您应该在 class 的实例上获得 IntelliSense
- 您可以将 JSDoc 注释添加到您的 .js 文件到 define/link .d.ts 类型
示例:
我的-class.d.ts
declare interface Options {
a: boolean
b: boolean
}
declare class MyClass {
constructor(options: Options)
action(num: number): string
}
我的-class.js
class MyClass {
/**
* @param {Options} options
*/
constructor(options) {
}
action(num) {
return num.toString();
}
}
var foo = new MyClass({ a: true, b: false } );
foo.action(88);
如果您将鼠标悬停在 .js 文件中的 foo 实例上,您会发现您确实获得了正确的 IntelliSense
通过将 JSDoc 注释“@param {Options} options”添加到 constructor() 中,您还将获得正确的 IntelliSense
JSDoc 和 TypeScript:https://github.com/Microsoft/TypeScript/wiki/JsDoc-support-in-JavaScript VSCode 和类型检查:https://code.visualstudio.com/docs/languages/javascript#_global-variables-and-type-checking