Насколько я понимаю, интерфейсы актуальны только в Typescript, и компилятор ts c должен быть достаточно умен, чтобы не преобразовывать их в файлы JS в конечном результате. Когда я компилирую свой код, интерфейсы компилируются с ним. Почему это?
Моя упрощенная структура проекта
src/
index.ts
lib/
EventClient.ts
interfaces/
EventClientConfig.ts
Что он компилирует в
dist/
index.js
lib/
EventClient.js
interfaces/
EventClientConfig.js
Мой tsconfig. json
{
"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?