Нокаут es5 типов

Я пытаюсь обновить свои нокауты, так как последняя версия машинописного текста обнаруживает проблемы со старыми.

Проблема связана с попыткой совместить набор текста 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.


comment
Вы пробовали это? stackoverflow.com/a/31969762/3082296   -  person adiga    schedule 06.12.2017
comment
Ага. Я обновил свой вопрос, указав результат этой попытки.   -  person Darrell    schedule 06.12.2017


Ответы (1)


Я думаю, что вы ищете.

import ko from 'knockout'

ko является объектом по умолчанию и будет импортироваться отдельно.

При использовании этого способа вы импортируете все объекты, а не только ko.

import * as ko from "knockout-es5"

Если вы собираетесь использовать этот способ, вы, вероятно, ищете его, чтобы вытащить ко из всего объекта.

import { ko } from "knockout-es5"
person Mardok    schedule 14.02.2018