Сам Egg.js написан не на TypeScript, но предоставляетindex.d.ts
файл, поэтому мы можем легко использовать TypeScript в нашем приложении Egg.
Шаблоны с использованием TypeScript в Egg.js:egg-ts-boilerplate.
Этот шаблон показывает, как писать такие вещи, какcontroller
,service
, конфигурация, база данных, запланированные задачи и расширения и другие концепции приложения яйца.
Эта статья является расширенным чтением этого шаблона, в основном для объяснения некоторых основных понятий, чтобы помочь пользователям, которые не очень хорошо знакомы с TypeScript, понять.
TypeScript
Основная идея TypeScript — писать в синтаксисе TypeScript..ts
файл, который затем компилируется компилятором в.js
документ. Согласно синтаксису TypeScript, если вы используете класс, его нужно сначала объявить, иначе компилятор его «не знает» и не скомпилирует.
Суть использования TypeScript в вашем собственном приложении Egg заключается в том, «как заставить компилятор распознавать классы в библиотеке Egg».index.d.ts
.
index.d.ts
Ключом к использованию TypeScript в Egg являетсяindex.d.ts
документ.
index.d.ts
как в С/С++.h
документ. Его роль можно просто понять как объявление API классов и библиотек.
Хотя Egg не написан на TypeScript, он обеспечиваетindex.d.ts
файл, поэтому, когда вы находитесь в своем приложенииimport xxx from 'egg'
, компилятор знает, как с этим справиться.
Первая основная проблема использования TypeScript в Egg: Egg'sindex.d.ts
Документация, авторы Egg и сообщество помогли нам (хотя и не совсем).
Второй вопрос: в нашем приложенииcontroller
а такжеservice
подождите, это от яйцаController
,Service
Унаследовано от других классов. Эти настройки находятся в Egg'sindex.d.ts
недоступен в , поэтому его нужно записать вмой собственный index.d.ts
в файле.
// egg-ts-boilerplate/index.d.ts
declare module 'egg' {
export interface Application {
config: EggAppConfig & DefaulConfig;
bar: string;
}
export interface IController {
home: HomeController;
}
export interface IService {
home: HomeService;
}
}
Этоegg-ts-boilerplate
изindex.d.ts
. Теперь компилятор "знает"app.config
,app.bar
,controller.home
а такжеservice.home
.
В общем, пойми и поймиindex.d.ts
, вы можете свободно использовать TypeScript для написания приложений Egg.
Политика разрешения модуля
Знакомство со стратегией разрешения модулей TypeScript помогает при столкновении сnot found module
Устранение неполадок при возникновении ошибок.
TypeScript поддерживает две стратегии:class
а такжеnode
.egg-ts-boilerplate
используетnode
режим (в.tsconfig.json
определено в).
Его порядок разбора аналогичен Node.js. предположим в/root/src/moduleA.ts
серединаimport 'moduleB'
, порядок разбора такой:
/root/src/node_modules/moduleB.ts
/root/src/node_modules/moduleB.tsx
/root/src/node_modules/moduleB.d.ts
-
/root/src/node_modules/moduleB/package.json
серединаtypes
Атрибуты /root/src/node_modules/moduleB/index.ts
/root/src/node_modules/moduleB/index.tsx
/root/src/node_modules/moduleB/index.d.ts
/root/node_modules/moduleB.ts
/root/node_modules/moduleB.tsx
/root/node_modules/moduleB.d.ts
-
/root/node_modules/moduleB/package.json
серединаtypes
Атрибуты /root/node_modules/moduleB/index.ts
/root/node_modules/moduleB/index.tsx
/root/node_modules/moduleB.index.d.ts
/node_modules/moduleB.ts
/node_modules/moduleB.tsx
/node_modules/moduleB.d.ts
-
/node_modules/moduleB/package.json
серединаtypes
Атрибуты /node_modules/moduleB/index.ts
/node_modules/moduleB/index.tsx
/node_modules/moduleB/index.d.ts
Основная идея состоит в том, чтобы сначала найти файл с таким же именем, а если нет, рассматривать имя модуля как папку. Выдает, если не найдены все путиnot found
ошибка.
обратите внимание здесьimport 'moduleB'
является неотносительным путем. Если это относительный путь, он будет разрешен в соответствии с указанным путем.
Для получения подробных инструкций вы можете прочитать документацию:Module Resolution
Расположение скомпилированных файлов
Обычно при использовании TypeScript.ts
файл в/src
папку, а затем скомпилируйте полученный.js
файл в/build
папка, приложение фактически запущено/build
в папке.js
документ.
Egg имеет обязательные требования к структуре папок приложений, поэтому в.tsconfig.json
Выходная папка не указана в , поэтому скомпилированный.js
файл будет и.ts
Файлы находятся в одном каталоге.
Если вы используете VSCode, он не отображается в проводнике после компиляции..js
файл (видимый в Finder). Потому что/.vscode/setting.json
установить в.js
Файл не виден (и также невидимnode_module/
Ждать). Если вы используете другие редакторы, вы можете сделать соответствующие настройки.