【发布时间】:2020-07-21 20:55:58
【问题描述】:
这看起来很简单,因为相同的代码在简单的 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"
]
}
测试仓库是here。
使用给定的 tsconfig.json 文件,我无法很好地导入 ko4 包。我可以更改 tsconfig.json 中的一些内容,但我不知道如何使其与我的主项目中使用的所有模块兼容。我选择使用 ES6 导入语法,因为它是面向未来的。
我会使用 KnockOut v3.5,但它不适用于 ES6 导入语法。
我还想提一下我使用的是 VS Code。
谢谢。
更新 1
(基于 Nenad 的回答)
在 tsconfig.json 中,我必须将 moduleResolution 设置为“Node”(以前它是默认设置,在我的例子中是“经典”)。
我还必须在我的项目的根目录中创建一个package.json 文件。我以为我有一个,但我只有一个package-lock.json。创建package.json 文件后,我重新运行npm i,现在VS Code 可以理解导入。我不必在node_modules 目录中添加路径,我只需输入 npm 模块的名称即可。
我还必须将KnockoutObservable 替换为ko.Observable 以及我的项目中使用的所有其他Knockout... 命名的类和接口。
剩下的问题是我切换到AMD模块系统后输出文件(bundle.js)没有包含所有需要的模块,只有main.ts文件转换为JS。可能这是另一个问题的主题。
【问题讨论】:
标签: javascript typescript import knockout.js tsc