如何声明具有相同名称的接口,函数和变量?
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');
答案 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');