Я пытаюсь обновить свои нокауты, так как последняя версия машинописного текста обнаруживает проблемы со старыми.
Проблема связана с попыткой совместить набор текста knockout и knockout.es5.
Я использую VS2017 и файл tsconfig.
Я устанавливаю нокаут-типизацию так:
typings install dt~knockout
а затем я устанавливаю типизацию knockout-es5 следующим образом:
typings install dt~knockout-es5 --global
После того, как я установил нокаутные типы es5, у них есть ошибки компиляции, потому что такого типа не существует KnockoutObservable<T>
.
Итак, я добавил это в начало набора типов knockout-es5:
/// <reference path="../../modules/knockout/index.d.ts" />
import * as ko from "knockout";
и изменил KnockoutObservable<any>
на ko.Observable<any>
, и теперь он компилируется.
Итак ... теперь я хочу использовать эти типы ввода для создания модели представления нокаута, поэтому в новом файле машинописного текста:
import * as ko from "knockout"
class Foo {
Id: number
Name: string
constructor(id: number, name: string) {
this.Id = id;
this.Name = name;
ko.track(this);
}
}
Это приводит к ошибке компиляции, поскольку track
не существует на typeof ko
Это связано с тем, что ko импортируется из модуля knockout
, который экспортируется из knockout
типизаций, однако track
- это метод, который предназначен для добавления knockout-es5
типами, но это не так. Как мне изменить файл типов knockout-es5, чтобы это работало?
Обновление: я попытался добавить это в конец файла knockout.es5 / index.d.ts:
declare var ko: KnockoutStatic;
declare module "knockout-es5" {
export = ko;
}
И в моем файле машинописного текста я пытаюсь:
import * as ko from "knockout-es5"
Но оператор импорта не компилируется: он говорит cannot find module knockout-es5
.
Я тоже пробовал это:
import * as ko from "../typings/globals/knockout.es5/index"
Кажется, это работает, но для этого мне нужно изменить свой код, что мне кажется неправильным (обратите внимание на дополнительный .ko
:
class Application {
Id: number
Name: string
constructor(id: number, name: string) {
this.Id = id;
this.Name = name;
ko.ko.track(this);
}
}
Кроме того, как только я это сделаю, я больше не могу разрешать исходные ko
типы, такие как ko.Observable
.