TypeScript HandbookのModuleのところを読んでいたら、こんなコードが出てきた。
内部モジュール
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はモジュール内にも書くことができる。