【问题标题】:Typescript: Working with Other JavaScript Libraries with a single functionTypescript:使用单个函数与其他 JavaScript 库一起工作
【发布时间】:2015-09-17 17:18:46
【问题描述】:

在打字稿中,我理解how to specify the shape of an external library。考虑只需要库中的一个函数或库只是一个(可能重载)函数(例如this library for the function merge)的情况。必须使用模块名称 -dot- 函数名称来调用函数相当冗长:

在文件merge.d.ts

declare module "merge" {
    export function merge(o: Object, ...args: Object[]): Object;
    export function merge(isDeep: boolean, o: Object, ...args: Object[]): Object
}

在一些测试文件中:

///<reference path="merge.d.ts"/>
import merge = require('merge');
merge.merge({x: 1}, {y: 2});

有没有一种不同的方法可以有效地将第 3 行的 merge.merge 替换为 merge,同时仍在检查类型?

【问题讨论】:

  • 其实这段代码根本行不通。即使它在编译时进行类型检查,但在运行时,merge.merge 是未定义的。我认为问题在于merge npm 只是一个函数而不是一个模块。

标签: interface module typescript


【解决方案1】:

ES6 解构会为你提取具体的函数:

import { merge } from 'merge';
merge({x: 1}, {y: 2});

您不必更改模块结构。

更多示例:http://www.2ality.com/2014/09/es6-modules-final.html

【讨论】:

    【解决方案2】:

    使用export =。这是完整的示例:

    declare module "merge" {
    
        interface Merge {
            merge(o: Object, ...args: Object[]): Object;
            merge(isDeep: boolean, o: Object, ...args: Object[]): Object;
        }
        var merge:Merge;
        export = Merge;
    }
    

    【讨论】:

    • 第二次出现declare 时出现编译错误:“环境上下文中的代码不允许使用'declare' 修饰符。”删除它会消除编译错误,但是在导入文件中找不到符号merge
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    • 2020-04-03
    • 2018-06-17
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    相关资源
    最近更新 更多