Я пытаюсь использовать Knockout. js с TypeScript.
У меня установлены соответствующие пакеты локально с npm (только один проект root npm), как указано в npm ls
:
@types/knockout@3.4.67
knockout@3.5.1
wpapi@1.2.1
UNMET PEER DEPENDENCY typescript@>= 2.x
(я не знаю, что это значит, но возможно это актуально) @types/jquery@3.3.34
@types/wpapi@1.1.0
Типы wpapi
хорошо работают с реальным пакетом wpapi, но вылет не кажется чтобы работать таким образом.
Иногда я получаю эту ошибку выше в консоли браузера:
Ошибка: не удается найти модуль 'нокаут' из '/.../root- project-directory / subdir1 / subdir2 / js '.
В других случаях я получаю это как вывод tsc
:
[17:52:36] Starting compilation in watch mode...
../node_modules/@types/knockout/index.d.ts:1062:13 - error TS2403: Subsequent variable declarations must have the same type. Variable 'ko' must be of type 'typeof import("/.../root-project-directory/node_modules/knockout/build/types/knockout")', but here has type 'KnockoutStatic'.
1062 declare var ko: KnockoutStatic;
~~
../node_modules/knockout/build/types/knockout.d.ts:5:1
5 export as namespace ko;
~~~~~~
'ko' was also declared here.
[17:52:43] Found 1 error. Watching for file changes.
В main.ts
У меня есть :
import ko = require("knockout");
import * as WPAPI from "wpapi";
или
import * as ko from "knockout";
import * as WPAPI from "wpapi";
В последнем случае я получаю следующие ошибки:
[18:12:15] Starting compilation in watch mode...
wp-content/themes/custom-theme/assets/ts/main.ts:1:21 - error TS2307: Cannot find module 'knockout'.
1 import * as ko from "knockout";
~~~~~~~~~~
wp-content/themes/custom-theme/assets/ts/main.ts:39:19 - error TS2304: Cannot find name 'KnockoutObservable'.
39 language: KnockoutObservable<string>;
~~~~~~~~~~~~~~~~~~
wp-content/themes/custom-theme/assets/ts/main.ts:40:15 - error TS2304: Cannot find name 'KnockoutObservable'.
40 slug: KnockoutObservable<string>;
~~~~~~~~~~~~~~~~~~
wp-content/themes/custom-theme/assets/ts/main.ts:41:26 - error TS2304: Cannot find name 'KnockoutObservable'.
41 renderedContent: KnockoutObservable<string>;
~~~~~~~~~~~~~~~~~~
[18:12:21] Found 4 errors. Watching for file changes.
и включаю нокаут, используя тег <script>
. Я использую VS Code.
Пожалуйста, помогите мне решить эту проблему.
Еще один соответствующий открытый вопрос здесь .
Спасибо.
Обновление 1
Если я удаляю @types/knockout
, используя npm uninstall @types/knockout
, я получаю эти ошибки при запуске cd html; tsc
:
[13:48:34] Starting compilation in watch mode...
wp-content/themes/custom-theme/assets/ts/main.ts:40:19 - error TS2304: Cannot find name 'KnockoutObservable'.
40 language: KnockoutObservable<string>;
~~~~~~~~~~~~~~~~~~
wp-content/themes/custom-theme/assets/ts/main.ts:41:15 - error TS2304: Cannot find name 'KnockoutObservable'.
41 slug: KnockoutObservable<string>;
~~~~~~~~~~~~~~~~~~
wp-content/themes/custom-theme/assets/ts/main.ts:42:26 - error TS2304: Cannot find name 'KnockoutObservable'.
42 renderedContent: KnockoutObservable<string>;
~~~~~~~~~~~~~~~~~~
wp-content/themes/custom-theme/assets/ts/main.ts:50:29 - error TS2304: Cannot find name 'ko'.
50 this.language = ko.observable(language);
~~
wp-content/themes/custom-theme/assets/ts/main.ts:51:25 - error TS2304: Cannot find name 'ko'.
51 this.slug = ko.observable(slug);
~~
wp-content/themes/custom-theme/assets/ts/main.ts:52:36 - error TS2304: Cannot find name 'ko'.
52 this.renderedContent = ko.observable("");
~~
wp-content/themes/custom-theme/assets/ts/main.ts:97:9 - error TS2304: Cannot find name 'ko'.
97 ko.applyBindings(new PageViewModel(null, "home"));
~~
[13:48:40] Found 7 errors. Watching for file changes.
Перед удалением @types/knockout
все работало хорошо, поэтому я делаю не знаю, в чем была настоящая проблема. Возможно, проблема была решена, потому что я закомментировал import * as ko from "knockout";
с начала main.ts
. Поэтому я снова устанавливаю пакет @types/knockout
.
Обновление 2
Этот является моим связанным вопросом.