Почему мои машинописные интерфейсы компилируются в javascript? - PullRequest
0 голосов
/ 08 мая 2020

Насколько я понимаю, интерфейсы актуальны только в 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?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Это было решено благодаря @AluanHaddad, который предложил использовать файлы объявлений .d.ts. Я изменил все имена файлов своих интерфейсов так, чтобы они заканчивались на .d.ts и больше не включались в вывод.

1 голос
/ 08 мая 2020

Ответ на ваши вопросы здесь модули

В TypeScript, как и в ECMAScript 2015, любой файл, содержащий импорт или экспорт верхнего уровня, считается модулем. И наоборот, файл без каких-либо деклараций импорта или экспорта верхнего уровня рассматривается как сценарий, содержимое которого доступно в глобальной области (и, следовательно, также и для модулей).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...