gpt4 book ai didi

javascript - 如何在 TypeScript 中导入 KnockOut 4?

转载 作者:行者123 更新时间:2023-12-02 21:10:13 24 4
gpt4 key购买 nike

这看起来很简单,因为相同的代码在简单的 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 .

Using the given tsconfig.json file, I cannot import the ko4 package well. I could change some of the things in tsconfig.json but I do not know how to make it compatible with all the used modules in my main project. I chose to use ES6 import syntax because it is future-proof.

我会使用 KnockOut v3.5,但它不适用于 ES6 导入语法。

我还想提一下我使用 VS Code。

谢谢。

更新 1

(基于 Nenad 的回答)

在 tsconfig.json 中,我必须将 moduleResolution 设置为“Node”(以前它是默认值,在我的例子中为“classic”)。

我还必须在项目的根目录中创建一个 package.json 文件。我以为我有一个,但我只有一个 package-lock.json。创建 package.json 文件后,我重新运行 npm i,现在 VS Code 可以理解导入。我不必在 node_modules 目录中放置某个内容的路径,我只需放置 npm 模块的名称即可。

我还必须将 KnockoutObservable 替换为 ko.Observable 以及我的应用程序中使用的所有其他以 Knockout... 命名的类和接口(interface)项目。

剩下的问题是,在我切换到AMD模块系统后,输出文件(bundle.js)不包含所有需要的模块,只是转换为JS的main.ts文件。可能这是另一个问题的主题。

最佳答案

如果您通过“npm”或“yarn”获得 knockout 版本3:

yarn add knockout

导入 knockout 所需要做的就是:

import * as ko from "knockout";

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

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

这就是 TypeScript 知道如何将“knockout”解析为特定 JavaScript 文件以及从何处提取 TypeScript 类型的方式。类型捆绑在包中。

版本 4

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

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

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

import * as ko from "knockout";

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

关于javascript - 如何在 TypeScript 中导入 KnockOut 4?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61117755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com