繁体   English   中英

如何在 TypeScript 中导入 KnockOut 4?

[英]How to import KnockOut 4 in TypeScript?

这看起来很简单,因为相同的代码在简单的 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 package。 我可以更改 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模块系统后,output文件(bundle.js)没有包含所有需要的模块,只有main.ts文件转换为JS。 可能这是另一个问题的主题。

如果您通过“npm”或“yarn”获得淘汰赛版本 3

yarn add knockout

导入淘汰赛所需要做的就是:

import * as ko from "knockout";

这是有效的,因为在node_modules\knockout文件夹中,您有package.json文件,其中包含以下行(以及其他):

  "main": "build/output/knockout-latest.js",
  "types": "build/types/knockout.d.ts",

这就是 typescript 如何知道如何from "knockout"解析到特定的 JavaScript 文件,以及从哪里提取 TypeScript 类型。 类型捆绑在 package 中。

版本 4

另一方面,如果你下载版本 4 : yarn add @tko/build.knockout它只包含:

  "main": "dist/build.knockout.js",

所以正确的导入方法仍然是:

import * as ko from "knockout";

但是,您需要单独找到 TypeScript 定义并将它们添加到项目中。 据我所知,对于第 4 版,它们不存在于主 GitHub存储库中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM