Cum să exporți/importi doar o definiție de tip în TypeScript


Cum pot să export și să import o definiție de tip independent de modulul în sine.

În Flowtype, acest lucru ar arăta astfel: Fișierul sub.js exportă tipul myType folosind export type myType={id: number}; și fișierul main.js importă tipul folosind import type {myType} from './sub.js';

Răspuns #1

Typescript 3.8 și versiunile ulterioare au exporturi și importuri doar de tip:

https://devblogs.microsoft.com/typescript/announcing-typescript-3-8/#type-only-imports-exports

import type { SomeThing } from "./some-module.js";

export type { SomeThing };

Răspunsul #2

Pur și simplu îl imporți normal și compilatorul determină că nu este necesar să fie emisă instrucțiunea import deoarece nu se folosește cod concret.

Iată un exemplu:

component.ts

export interface MyInterface {
    name: string;
}

app.ts

import { MyInterface } from './component';

class MyClass implements MyInterface {
    constructor(public name: string) { }
}

Fișierul app.js este pur și simplu (versiunea ES2015):

class MyClass {
    constructor(name) {
        this.name = name;
    }
}

Sau în termeni mai vechi ES5:

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var MyClass = /** @class */ (function () {
    function MyClass(name) {
        this.name = name;
    }
    return MyClass;
}());

Ceea ce este important aici este că compilatorul TypeScript a înțeles că importul este necesar doar în timpul compilării, nu la rulare.