Разработка / организация модуля узла в TypeScript

Я хочу разработать модуль узла на TypeScript, но у меня возникли проблемы со всеми возможными опциями: требовать, импортировать и т. Д.

Что я сейчас делаю, так это то, что каждый класс и интерфейс хранятся в собственном файле. Поэтому мне нужно было бы потребовать все зависимости, что немного глупо, потому что я дважды набираю имя класса, например:

import Target = require('./Target');

export interface IFace {

    getTarget(): Target.Target
}

Вместо этого я мог бы написать import t = require('./Target');, но тогда мне нужно написать t.Target, что, на мой взгляд, тоже довольно некрасиво.

А также я не могу дать ему имя модуля (например, FaceApp), потому что, когда мне нужно импортировать два файла, возникает конфликт имен.

Очевидно, в этом не было бы необходимости, если бы все было в одном файле, но я думаю, что это далеко не оптимально.

Итак, как вы, ребята, организуете свой модуль узла в TypeScript? Буду рад услышать ваши предложения.


person Johannes Klauß    schedule 30.05.2014    source источник


Ответы (2)


Вы можете избежать дублирования имен, используя синтаксис export =. т.е. делать:

class Target{}
export = Target;

вместо export class Target.

Также трансформаторы grunt-ts могут помочь вам с взрывным ростом операторов импорта: https://github.com/grunt-ts/grunt-ts/issues/85#issue-29515541

person basarat    schedule 30.05.2014
comment
Ах ... я не думал об этом. Спасибо. - person Johannes Klauß; 30.05.2014

Способ, которым , рекомендованный TypeScript, является

export default class Target {}

а затем вы можете выполнить настоящий импорт машинописного текста с помощью

import Target from './Target'

в качестве альтернативы вы можете переименовать его

import NewName from './Target'

Также обратите внимание, что вы можете экспортировать несколько вещей из файла, если они связаны

export class SomeClass {}
export class OtherClass {}

И что при импорте вы можете изменить имена

import { SomeClass as MySomeClass, OtherClass as MyOtherClass } from './Target'
person Troy Weber    schedule 31.03.2017