2

我正在尝试更新我的敲除打字,因为最新版本的打字稿正在检测旧打字稿的问题。

问题在于试图让 knockout 和 knockout.es5 类型一起工作。

我正在使用 VS2017 和 tsconfig 文件。

我像这样安装淘汰赛类型:

typings install dt~knockout

然后我像这样安装敲除-es5类型:

typings install dt~knockout-es5 --global

在我安装了淘汰赛 es5 类型后,它们会出现编译错误,因为没有这样的类型KnockoutObservable<T>

所以我将这个添加到了敲除 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);
    }
}

这会导致编译错误,因为tracktypeof 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"

但是 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);
    }
}

而且一旦我这样做了,我就不能再解析koko.Observable.

4

1 回答 1

0

我想你要找的是什么。

import ko from 'knockout'

ko 是默认对象,将单独导入。

当您使用这种方式时,您正在导入所有对象,而不仅仅是 ko。

import * as ko from "knockout-es5"

如果您打算使用这种方式,您可能正在寻找这种方式以将 ko 从完整对象中拉出。

import { ko } from "knockout-es5"
于 2018-02-14T14:52:08.820 回答