Posted at

TypeScriptのimportはどこに書くことができるか

More than 5 years have passed since last update.

TypeScript HandbookのModuleのところを読んでいたら、こんなコードが出てきた。

http://www.typescriptlang.org/Handbook#modules

内部モジュール


Test.ts

/// <reference path="Validation.ts" />

/// <reference path="LettersOnlyValidator.ts" />
/// <reference path="ZipCodeValidator.ts" />
...
var validators: { [s: string]: Validation.StringValidator; } = {};
validators['ZIP code'] = new Validation.ZipCodeValidator();
validators['Letters only'] = new Validation.LettersOnlyValidator();

外部モジュール


Test.ts

import validation = require('./Validation');

import zip = require('./ZipCodeValidator');
import letters = require('./LettersOnlyValidator');
...
var validators: { [s: string]: validation.StringValidator; } = {};
validators['ZIP code'] = new zip.ZipCodeValidator();
validators['Letters only'] = new letters.LettersOnlyValidator();

内部モジュールの時は、Validation.ZipCodeValidatorだったのが、外部モジュールの時はzip.ZipCodeValidatorとして参照している。わかるんだけどこれどうにかまとめられないのかなと思って考えてみた。


Validation.ts

export interface StringValidator {

isAcceptable(s: string): boolean;
}
// 以下追記
import zip = require("./ZipCodeValidator");
import letters = require("./LettersOnlyValidator");
export import ZipCodeValidator = zip.ZipCodeValidator;
export import LettersOnlyValidator = letters.LettersOnlyValidator;

importしてからのexport。これならTest.ts側でvalidation.ZipCodeValidatorとして参照できる。

あるいはこうも書けそうだ。


Validation.ts

import zip = require("./ZipCodeValidator");

import letters = require("./LettersOnlyValidator");
module Validator {
export interface StringValidator {
isAcceptable(s: string): boolean;
}
export import ZipCodeValidator = zip.ZipCodeValidator;
export import LettersOnlyValidator = letters.LettersOnlyValidator;
}
export = Validator;

外部モジュールのimportはファイルのトップレベルにしか書けないが、Aliasとしてのimportはモジュール内にも書くことができる。