Это кажется простым, потому что тот же код хорошо работает в простом файле JS, а также имеет автозаполнение для членов переменной ko. У меня есть следующий код TypeScript ниже:
// both of the following import lines result in: `ko` undefined
// import { ko } from "@tko/build.knockout";
import { ko } from "../node_modules/@tko/build.knockout/dist/build.knockout.es6";
alert("test: " + ko);
tsconfig.json
{
"compilerOptions": {
"removeComments": true,
"preserveConstEnums": true,
"sourceMap": true,
"outDir": "js",
"target": "ES3",
"watch": true,
"allowJs": true,
"lib": ["ES5", "DOM"],
"module": "CommonJS"
},
"include": [
"ts"
],
"exclude": [
"node_modules"
]
}
Тестовое репо здесь .
Используя данный файл tsconfig. json, я не могу хорошо импортировать пакет ko4. Я мог бы изменить некоторые вещи в tsconfig. json, но я не знаю, как сделать его совместимым со всеми используемыми модулями в моем основном проекте. Я решил использовать синтаксис импорта ES6, потому что он рассчитан на будущее.
Я бы использовал KnockOut v3.5, но он не работает с синтаксисом импорта ES6.
У меня также есть ш sh упомянуть, что я использую VS Code.
Спасибо.
Обновление 1
(на основе ответа от Nenad )
В tsconfig. json Мне пришлось установить moduleResolution на "Node" (ранее это было по умолчанию, в моем случае "classi c").
Мне также пришлось создать package.json
файл в каталоге root моего проекта. Я думал, что у меня был один, но у меня был только package-lock.json
. После создания файла package.json
я снова запускаю npm i
, и теперь VS Code понимает импорт. Мне не нужно указывать путь к чему-либо внутри каталога node_modules
, я просто поместил имя модуля npm.
Мне также пришлось заменить KnockoutObservable
на ko.Observable
и все другие Knockout...
названные классы и интерфейсы, используемые в моем проекте.
Остается проблема в том, что после того, как я переключился на модульную систему AMD, выходной файл (bundle. js) не содержит все необходимые модули , только файл main.ts, преобразованный в JS. Возможно, это тема другого вопроса.