如何声明具有相同名称的接口,函数和变量?

时间:2015-08-19 07:44:52

标签: node.js typescript

如何声明具有相同名称的接口,函数和变量?

E.g。我想使用像:

这样的功能
declare function someName(...args: any[]);

someName('foo');

界面:

interface someName {
    (...args: any[]): someName
}

function test(arg: someName): someName {
}

并将其用作变量(对于NodeJS),它应该在编译的JS中获得输出。

var someName = require('someName');

2 个答案:

答案 0 :(得分:2)

一旦声明了描述函数的接口,您还可以使用接口作为类型声明一个具有相同名称的变量:

interface someName {
    (...args: any[]): someName;
}

declare var someName: someName;

someName('foo');

function test(arg: someName): someName {
    return this;
}

someName('foo')的调用正确猜出了你的意思(即变量someName,这是一个函数)。

我实现了test函数的主体,因为它返回了someName - 只是为了确保没有编译器错误。

作为外部模块的类型定义的完整实现将是:

someName.ts

interface someName {
    (...args: any[]): someName;
}

declare var someName: someName;

export = someName;

app.ts

import * as someName from 'someName'

someName('grr', 'arr', 'arg')

答案 1 :(得分:2)

史蒂夫回答了你问的问题。但我怀疑你正在寻找以下内容:

类型定义someName.d.ts

declare module 'someName' {
    interface someName {
       (...args: any[]): someName
    }
    var someName:someName;
    export = someName;
}

然后使用它app.ts

import someName = require('someName');

更多

https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1