我正在尝试更新我的 knockout 打字,因为最新版本的 typescript 正在检测旧版的问题。
问题来自试图让 knockout 和 knockout.es5 打字协同工作。
我正在使用 VS2017 和一个 tsconfig 文件。
我像这样安装 knockout 类型:
typings install dt~knockout
然后我像这样安装 knockout-es5 类型:
typings install dt~knockout-es5 --global
在我安装了knockout es5 typings之后,他们有编译错误,因为没有这样的类型KnockoutObservable<T>
.
所以我将其添加到 knockout-es5 打字的顶部:
/// <reference path="../../modules/knockout/index.d.ts" />
import * as ko from "knockout";
并更改了KnockoutObservable<any>
至 ko.Observable<any>
现在可以编译了。
所以..现在我想使用这些类型来创建一个 knockout View 模型,所以在一个新的 typescript 文件中:
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;
}
在我的 typescript 文件中,我正在尝试:
import * as ko from "knockout-es5"
但是 import 语句不会编译:它说 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
的类型.
最佳答案
我想你要找的是什么。
import ko from 'knockout'
ko 是默认对象,将单独导入。
当您使用这种方式时,您将导入所有对象,而不仅仅是 ko。
import * as ko from "knockout-es5"
如果您打算使用这种方式,您可能正在寻找这种方式来将 ko 从完整对象中拉出来。
import { ko } from "knockout-es5"
关于typescript - knockout es5 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47671487/