Ответ 1
Вы можете сделать работу TSLint в вашем случае, удалив эти строки из tsconfig.json
:
"baseUrl": "./packages",
"paths": {
"*": ["./*/src"]
},
Эти строки сообщают компилятору TypeScript и TSLint, что они не должны обрабатывать ваши модули a
и b
как пакеты при импорте, но они должны разрешать отдельные файлы TypeScript с использованием параметров baseUrl
и paths
а затем компилировать отдельные файлы TypeScript. Это поведение описано в разделе "Разрешение модуля" → "Сопоставление маршрутов" документации TypeScript:
https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping
Вместо этого, если бы я понял вас правильно, вы хотите рассматривать a
и b
как независимые пакеты. Для этого вы должны удалить сопоставление пути, а затем TypeScript и TSLint будут обрабатывать их как пакеты npm.
ОБНОВЛЕНИЕ (на основе обсуждения в комментариях)
В вашем проекте вы запускаете TSLint, используя команду:
tslint -p tsconfig.json
но вы запускаете TSC с помощью команды:
tsc src/index.ts --outDir dist
Ваш TSLint использует API-интерфейс компилятора TypeScript для выполнения проверок на основе правил от tsconfig.json
. Но ваш компилятор TypeScript не использует правила tsconfig.json
. В реальных проектах -w orld обе команды будут использовать tsconfig.json
Когда вы начнете использовать tsconfig.json
для компиляции, вы получите ту же проблему с разрешением типов зависимостей 2-й степени, как у вас с TSLint:
$ tsc -p tsconfig.json
../b/src/index.ts:1:23 - error TS7016: Could not find a declaration file for module 'camelcase'. '/home/victor/work/tslint-yarn-workspaces.org/node_modules/camelcase/index.js' implicitly has an 'any' type.
Try 'npm install @types/camelcase' if it exists or add a new declaration (.d.ts) file containing 'declare module 'camelcase';'
1 import camelCase from 'camelcase'
~~~~~~~~~~~
Это происходит из-за того, что импортированные модули импортируются по-разному по дизайну, затем нормальный импорт из node_modules
соответствии с документацией TypeScript https://www.typescriptlang.org/docs/handbook/module-resolution.html#path-mapping, как указано в первом часть ответа.
Я бы рекомендовал использовать обычный импорт в вашем проекте, чтобы не иметь проблем с инструментами:
-
"watch": "lerna run --parallel -- watch"
скрипт в рабочей области rootpackage.json
- Имейте
"watch": "tsc -p tsconfig.json -w"
в пакетах рабочей области. - Всякий раз, когда вы вносите изменения в свой проект, запускайте компилятор TypeScript в режиме просмотра в каждом пакете, запустив
npm run watch
в режимеnpm run watch
в корневой области рабочей области.