据我了解,接口仅与Typescript相关,并且tsc编译器应足够聪明,以至于在最终输出中不将其转换为JS文件。当我编译我的代码时,正在使用它来编译接口。为什么会这样?
src/
index.ts
lib/
EventClient.ts
interfaces/
EventClientConfig.ts
dist/
index.js
lib/
EventClient.js
interfaces/
EventClientConfig.js
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true,
"outDir": "./dist",
"lib": ["ES6", "DOM"],
"target": "ES2018",
"module": "CommonJS",
"moduleResolution": "node",
"esModuleInterop": true,
"resolveJsonModule": true,
"baseUrl": ".",
"removeComments": true,
"strict": true,
"typeRoots": ["./node_modules/@types"],
"rootDir": "./src",
"types": [
"node",
"jest-fetch-mock",
"express",
"reflect-metadata"
]
},
"include": ["src"],
"exclude": ["dist", "node_modules", "**/*spec.ts"]
}
export interface EventClientConfig {
endpoint: string;
authToken: string;
}
import { EventClientConfig } from '../interfaces/EventClientConfig';
const config: EventClientConfig = {
endpoint: '/api',
authToken: '123456'
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
在已编译的代码中,EventClient.js并未实际引用EventClientConfig.js,因此绝对不是必需的。为什么Typescript将接口文件编译为JS?
答案 0 :(得分:2)
您的问题的答案在modules
在TypeScript中,就像在ECMAScript 2015中一样,任何包含顶级导入或导出的文件都被视为模块。相反,没有任何顶级导入或导出声明的文件将被视为脚本,其内容可在全局范围内使用(因此也可用于模块)。