作者:mobiledu2502853623 | 来源:互联网 | 2022-12-12 14:50
我认为可能存在概念上的误解,这是您在此处遇到的问题的基础。听起来您希望这些接口在运行时可用。Typescript接口纯粹是一个编译时概念。他们不编译任何东西。它们在运行时不存在。
我将这部分代码放入了一个名为的文件中interf.d.ts
:
export namespace Interfaces {
export interface Interface {
property: string;
}
}
然后我创建了文件test.ts
:
import { Interfaces } from "./interf";
const x: Interfaces.Interface = {
property: "abc",
};
console.log(x);
我没有编译错误,并且执行得很好。如预期的那样,接口已导出。在const
你以后出口不需要导出接口(反正它并不能导出接口,它导出一个const
其声明符合的接口,但是const
是不是接口)。
但是,如果您试图在已编译的Javascript中找到与您的接口相对应的内容,则由于我上面给出的原因,您将找不到它:它是一个编译时构造。
1> Louis..:
我认为可能存在概念上的误解,这是您在此处遇到的问题的基础。听起来您希望这些接口在运行时可用。Typescript接口纯粹是一个编译时概念。他们不编译任何东西。它们在运行时不存在。
我将这部分代码放入了一个名为的文件中interf.d.ts
:
export namespace Interfaces {
export interface Interface {
property: string;
}
}
然后我创建了文件test.ts
:
import { Interfaces } from "./interf";
const x: Interfaces.Interface = {
property: "abc",
};
console.log(x);
我没有编译错误,并且执行得很好。如预期的那样,接口已导出。在const
你以后出口不需要导出接口(反正它并不能导出接口,它导出一个const
其声明符合的接口,但是const
是不是接口)。
但是,如果您试图在已编译的Javascript中找到与您的接口相对应的内容,则由于我上面给出的原因,您将找不到它:它是一个编译时构造。
2> Tarun Lalwan..:
所以我能够使用JSDoc解决问题
测试文件
export namespace test {
export interface ITest {
foo: string;
bar: number;
}
}
test.js
/**
* @type {import("./test").test.ITest}
*/
let x;
x.
而智能感知现在
另外一两件事,我发现的是,如果添加jsconfig.json
与
jsconfig.json
{
"compilerOptions": {
"checkJs": true
}
}
您的智商进一步提高
更新1
正如@nickzoum所指出的,如果您定义test.d.ts
以下内容
/**
* @type {import("./test").test.ITest}
*/
let x;
x.
然后您也可以在JS中使用以下形式进行智能感知
/** @typedef {import("./test").ITest} ITest */
/** @type {ITest} */
var x = {};
x.