Node.js 如何声明具有相同名称的接口、函数和变量?

Node.js 如何声明具有相同名称的接口、函数和变量?,node.js,typescript,Node.js,Typescript,如何声明具有相同名称的接口、函数和变量 例如,我想使用如下功能: declare function someName(...args: any[]); someName('foo'); 界面: interface someName { (...args: any[]): someName } function test(arg: someName): someName { } 并将其用作变量(用于NodeJS),该变量应按编译后的JS中的原样获得输出 var someName =

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

例如,我想使用如下功能:

declare function someName(...args: any[]);

someName('foo');
界面:

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

function test(arg: someName): someName {
}
并将其用作变量(用于NodeJS),该变量应按编译后的JS中的原样获得输出

var someName = require('someName');

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

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

app.ts


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

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

app.ts


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

类型定义
someName.d.ts
: 然后使用它
app.ts
: 更多
史蒂夫回答了你问的问题。但我怀疑您正在寻找以下信息:

类型定义
someName.d.ts
: 然后使用它
app.ts
: 更多

我尝试了此操作,但在尝试编译
错误TS2307:找不到模块“someName”时出错。
将文件名从
some name.ts
更改为
someName.ts
-导入语句中使用的名称应为文件名。我尝试了此操作,但在尝试编译
错误TS2307:找不到模块时出错“someName”。
:将文件名从
some name.ts
更改为
someName.ts
-导入语句中使用的名称应为文件名。似乎是这样工作的,是否可以使其与命名空间一起工作@佩塔:是的。。。。但不要混合使用名称空间/模块。只要到处使用模块就可以了。如果您使用ModuleSems这样工作,文件自动没有全局作用域,是否可以使其与名称空间一起工作@佩塔:是的。。。。但不要混合使用名称空间/模块。只要到处使用模块就可以了。如果使用模块,则文件自动不具有全局作用域
import * as someName from 'someName'

someName('grr', 'arr', 'arg')
declare module 'someName' {
    interface someName {
       (...args: any[]): someName
    }
    var someName:someName;
    export = someName;
}
import someName = require('someName');