Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript可以导入网页包UMD吗?_Typescript_Webpack_Knockback.js - Fatal编程技术网

Typescript可以导入网页包UMD吗?

Typescript可以导入网页包UMD吗?,typescript,webpack,knockback.js,Typescript,Webpack,Knockback.js,使用TypeScript,是否有方法导入已由webpack UMD(通用模块定义)包装的模块?例如: npm install knockback .js文件(node_modules/knockback/knockback.js)的开头如下: (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'ob

使用TypeScript,是否有方法导入已由webpack UMD(通用模块定义)包装的模块?例如:

npm install knockback
.js文件(
node_modules/knockback/knockback.js
)的开头如下:

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory(require("knockout"), require("backbone"), ....
    else if(typeof define === 'function' && define.amd)
        define(["knockout", "backbone", "underscore"], function webpackLoadOptionalExternalModuleAmd( ....
        });
    else if(typeof exports === 'object')
        exports["kb"] = factory(require("knockout"), require("backbone"), require("underscore"), (function ....
    else
        root["kb"] = factory(root["ko"], root["Backbone"], root["_"], root["jQuery"]);
import * as kb from 'knockback';

class MyViewModel extends kb.ViewModel {
    public name: KnockoutObservable<string>;

    constructor(model: Backbone.Model) {
        super();

        this.name = kb.observable(model, "name");
    }
}

var model = new Backbone.Model({ name: "Hello World" });
var viewModel = new MyViewModel(model);

kb.applyBindings(viewModel, $("#kb_observable")[0]);
当我尝试将其导入.ts文件时,tsc会产生一个错误:

import * as k from 'knockback/knockback';

TS2307: Build: Cannot find module 'knockback/knockback'.
除了编辑knockback.js文件之外,我还能做些什么来说服tsc导入这个.js文件吗?我使用的是Typescript 1.8

当我尝试将其导入.ts文件时,tsc会产生一个错误:

import * as k from 'knockback/knockback';

TS2307: Build: Cannot find module 'knockback/knockback'.
您可以很容易地使用类型定义文件

文件
knockback.d.ts

declare module 'knockback/knockback' {
    var foo: any;
    export = foo;
}

仅供参考,对于任何试图通过Typescript使用knockback.js的人来说,这里有一个预先存在的
knockback.d.ts
文件可从中获得。但是,现有的.d.ts不包括导出,因此不能用于外部模块。根据basarat的回答,我修改了.d.ts文件如下:

1) 在末尾添加以下内容:

declare module "knockback" {
    export = Knockback;
}
2) 从末尾删除
declare var kb:Knockback.Static

3) 移除
接口静态扩展UTIL{
包装器,并将
静态
接口内的所有内容移动到命名空间范围。示例:

旧的:
接口静态扩展Utils{
视图模型;
可观测的采集;
collectionObservable(型号?:主干。集合,选项?:CollectionOptions):collectionObservable;
可观察(
/**要观察的模型(可以为空)*/
型号:主干,型号,
/**字符串是单个属性名,数组是属性名数组*/
选项:IObservableOptions,
/**视图模型*/
vm?:视图模型):可观察到的敲除;
...
}
新的:
function collectionObservable(模型?:主干。集合,选项?:CollectionOptions):collectionObservable;
可观测函数(
/**要观察的模型(可以为空)*/
型号:主干,型号,
/**字符串是单个属性名,数组是属性名数组*/
选项:IObservableOptions,
/**视图模型*/
vm?:视图模型):可观察到的敲除;
...
进行这些更改后,用法如下所示:

(function webpackUniversalModuleDefinition(root, factory) {
    if(typeof exports === 'object' && typeof module === 'object')
        module.exports = factory(require("knockout"), require("backbone"), ....
    else if(typeof define === 'function' && define.amd)
        define(["knockout", "backbone", "underscore"], function webpackLoadOptionalExternalModuleAmd( ....
        });
    else if(typeof exports === 'object')
        exports["kb"] = factory(require("knockout"), require("backbone"), require("underscore"), (function ....
    else
        root["kb"] = factory(root["ko"], root["Backbone"], root["_"], root["jQuery"]);
import * as kb from 'knockback';

class MyViewModel extends kb.ViewModel {
    public name: KnockoutObservable<string>;

    constructor(model: Backbone.Model) {
        super();

        this.name = kb.observable(model, "name");
    }
}

var model = new Backbone.Model({ name: "Hello World" });
var viewModel = new MyViewModel(model);

kb.applyBindings(viewModel, $("#kb_observable")[0]);
import*作为“knockback”中的kb;
类MyViewModel扩展了kb.ViewModel{
公共名称:KnockoutObservable;
构造函数(模型:主干.model){
超级();
this.name=kb.observable(model,“name”);
}
}
var model=new Backbone.model({name:“Hello World”});
var viewModel=新的MyViewModel(model);
应用绑定(viewModel,$(“#kb_可观察”)[0]);