Машинопись внутренних модулей в нескольких файлов

голоса
5

Предположим следующее определение класса с помощью машинопись в Animal.ts:

module Animals
{
    export class Animal { }    
}

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

module Animals
{
    export class Dog extends Animal { }
}

название «Animal» не существует в текущей области видимости, является ошибкой я получаю в определении класса Dog.

Добавление следующей строки в Dog.ts

/// <reference path=Animal.ts/>

фиксирует ошибку компиляции, но почему это необходимо, если оба класса определяется в том же модуле?

Другими слова, я хочу декларацию модуля, чтобы охватить через файлы с каждым классом или определением интерфейса в их собственном файле. Это даже лучшая практика?

Задан 08/10/2012 в 19:06
источник пользователем
На других языках...                            


2 ответов

голоса
5

Прежде всего, если вы собираете сразу обоих файлов с помощью

tsc Animal.ts Dog.ts

все будет отлично. При компиляции машинопись файлов, компилятор должен быть осведомлен о том, что файлы на самом деле constitue программу . Это может быть сделано с помощью ссылки источника с ///или предоставляя все файлы для компилятора. Это несколько отличается от других языков , таких как java, которые компилируются в промежуточное представление и имеют понятие , CLASSPATHгде искать другие файлы , которые являются частью программы.

Ответил 08/10/2012 в 19:31
источник пользователем

голоса
2

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

Я не уверен, что это лучшая практика сама по себе (нужно бы знать больше о приложении), но я не думаю, что это анти-модель, так что я думаю, что вы можете чувствовать себя свободно, чтобы сделать это. Модули в машинописном преднамеренно открытыми концами, чтобы обеспечить такого рода шаблон.

Ответил 08/10/2012 в 19:11
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more