在 ES6+ 中导出命名空间
Exporting Namespaces in ES6+
我来自 Java 世界,我正在尝试创建一个 vanilla JS (ES2018) 应用程序,它具有 JSDOC 中记录的类型,然后我使用 TypeScript 编译器来获取我可以使用的漂亮定义文件与我的应用程序捆绑在一起。我只有两个主要文件:client.js(包含默认导出的 class)和 constants.js(具有一些常量的默认导出对象),都在 src/ 下。我想在一个公共命名空间下公开这两个,所以我的 index.js 看起来像这样:
import XApiClient from 'src/brokers/xtb/x_api_client';
import {Constants} from 'src/brokers/xtb/x_api_constants';
/**
* @namespace
* @property {Constants} Constants
* @property {XApiClient} XApiClient
*/
const XApi = {Constants: Constants, Client: XApiClient};
export default XApi;
整个项目随后通过 npm+git 在其他地方使用,但在这个新项目中,Typescript 编译器无法识别 XApi.XApiClient 的类型。我目前非常绝望,正在考虑放弃编码并去山上照顾山羊。
最后我不得不硬着头皮将所有内容迁移到 Typescript,最后我还有一个额外的步骤来解析 JSDOC 标签以获取定义文件。错误似乎是由于 tsconfig.
上的配置错误造成的
FWIW 这是我的 tsconfig(我使用 gts 作为基准,还请注意我正在使用 webpack 将所有内容打包在一个文件中):
{
"extends": "./node_modules/gts/tsconfig-google.json",
"compilerOptions": {
"outDir": "js/",
"rootDir": "src/",
"sourceMap": true,
"moduleResolution": "node",
"module": "commonjs",
"target": "ES2018",
"lib": ["dom","dom.iterable", "ES2018"],
"noImplicitAny": true,
"allowSyntheticDefaultImports": true
},
"include": ["src/**/*.ts", "test/**/*.ts"],
"exclude": ["dist", "node_modules"]
}
我来自 Java 世界,我正在尝试创建一个 vanilla JS (ES2018) 应用程序,它具有 JSDOC 中记录的类型,然后我使用 TypeScript 编译器来获取我可以使用的漂亮定义文件与我的应用程序捆绑在一起。我只有两个主要文件:client.js(包含默认导出的 class)和 constants.js(具有一些常量的默认导出对象),都在 src/ 下。我想在一个公共命名空间下公开这两个,所以我的 index.js 看起来像这样:
import XApiClient from 'src/brokers/xtb/x_api_client';
import {Constants} from 'src/brokers/xtb/x_api_constants';
/**
* @namespace
* @property {Constants} Constants
* @property {XApiClient} XApiClient
*/
const XApi = {Constants: Constants, Client: XApiClient};
export default XApi;
整个项目随后通过 npm+git 在其他地方使用,但在这个新项目中,Typescript 编译器无法识别 XApi.XApiClient 的类型。我目前非常绝望,正在考虑放弃编码并去山上照顾山羊。
最后我不得不硬着头皮将所有内容迁移到 Typescript,最后我还有一个额外的步骤来解析 JSDOC 标签以获取定义文件。错误似乎是由于 tsconfig.
上的配置错误造成的FWIW 这是我的 tsconfig(我使用 gts 作为基准,还请注意我正在使用 webpack 将所有内容打包在一个文件中):
{
"extends": "./node_modules/gts/tsconfig-google.json",
"compilerOptions": {
"outDir": "js/",
"rootDir": "src/",
"sourceMap": true,
"moduleResolution": "node",
"module": "commonjs",
"target": "ES2018",
"lib": ["dom","dom.iterable", "ES2018"],
"noImplicitAny": true,
"allowSyntheticDefaultImports": true
},
"include": ["src/**/*.ts", "test/**/*.ts"],
"exclude": ["dist", "node_modules"]
}