Typescript 寻找类型脚本类型定义新+;可要求的澄清

Typescript 寻找类型脚本类型定义新+;可要求的澄清,typescript,Typescript,我的问题源于试图将TypeScript类型定义.d.ts添加到第三方库。请记住,我并不控制这个库,我只是试图使用它并安抚tsc编译器 阅读此处的指南:编写d.ts文件: 我正在看这个具体的例子:新的+可调用的方法 在此,文档显示了以下模式: interface Widget { sprock(): void; } interface WidgetFactory { new(name: string): Widget; (width: number, height: n

我的问题源于试图将TypeScript类型定义
.d.ts
添加到第三方库。请记住,我并不控制这个库,我只是试图使用它并安抚tsc编译器

阅读此处的指南:编写
d.ts
文件:

我正在看这个具体的例子:新的+可调用的方法

在此,文档显示了以下模式:

interface Widget {
    sprock(): void;
}

interface WidgetFactory {
    new(name: string): Widget;
    (width: number, height: number): Widget;
}

declare var widget: WidgetFactory;
在此基础上,我根据自己的需要创建了以下内容:

declare module "react-localization" {
    interface LocalizedStringsMethods {
        setLanguage(language: string): void;
        getLanguage(): string;
        getInterfaceLanguage(): string;
        formatString(str: string, ...values: any[]): string
        getAvailableLanguages(): string[]
    }

    interface LocalizedStringsFactory {
        new (props: any): LocalizedStringsMethods;
    }

    var LocalizedStrings: LocalizedStringsFactory;

    export default LocalizedStrings;
}
这里值得注意的例外是文档版本不使用
声明模块
。除此之外,在我看来,这些应该是相同的,也会产生类似的结果;我显然错过了什么。我得到了以下错误:

错误TS2351:无法将“new”与类型缺少调用或构造签名的表达式一起使用。

我可以将我的定义更改为:

declare module "react-localization" {
    var LocalizedStrings: any;
    export = LocalizedStrings;
}
错误现在消失了,但我丢失了所有精彩的类型信息,(

我不知所措。我到底做错了什么

好吧,为了增加神秘感,我尝试在更完整的类型示例中执行
export=
,而不是
export default

declare module "react-localization" {
    interface LocalizedStringsMethods {
        setLanguage(language: string): void;
        getLanguage(): string;
        getInterfaceLanguage(): string;
        formatString(str: string, ...values: any[]): string
        getAvailableLanguages(): string[]
    }

    interface LocalizedStringsFactory {
        new (props: any): LocalizedStringsMethods;
    }

    var LocalizedStrings: LocalizedStringsFactory;

    export = LocalizedStrings; // <----- HERE instead of export default
}
声明模块“react本地化”{
接口本地化字符串方法{
setLanguage(语言:字符串):void;
getLanguage():字符串;
getInterfaceLanguage():字符串;
formatString(str:string,…value:any[]):string
getAvailableLanguages():字符串[]
}
接口本地化StringsFactory{
新的(道具:任何):本地化StringsMethods;
}
var LocalizedStrings:LocalizedStrings工厂;
导出=本地化字符串;//解决方案是:

react本地化.d.ts

declare module "react-localization" {
    interface LocalizedStringsMethods {
        setLanguage(language: string): void;
        getLanguage(): string;
        getInterfaceLanguage(): string;
        formatString(str: string, ...values: any[]): string
        getAvailableLanguages(): string[]
    }

    interface LocalizedStringsFactory {
        new (props: any): LocalizedStringsMethods;
    }

    var LocalizedStrings: LocalizedStringsFactory;

    export default LocalizedStrings;
}
import LocalizedStrings from 'react-localization';

var x = new LocalizedStrings(123);
yourFile.ts

declare module "react-localization" {
    interface LocalizedStringsMethods {
        setLanguage(language: string): void;
        getLanguage(): string;
        getInterfaceLanguage(): string;
        formatString(str: string, ...values: any[]): string
        getAvailableLanguages(): string[]
    }

    interface LocalizedStringsFactory {
        new (props: any): LocalizedStringsMethods;
    }

    var LocalizedStrings: LocalizedStringsFactory;

    export default LocalizedStrings;
}
import LocalizedStrings from 'react-localization';

var x = new LocalizedStrings(123);

如果您想使用
export=
,那么应该使用
import=require()
。在

中的更多详细信息另外,这个第三方库似乎是从babel编译而来的:
当babel传输一个模块时,其唯一的导出是一个导出默认值,它会插入一个模块。exports=exports[“default”];导入生成的代码中,导致导出的对象成为函数本身(而不是将函数作为默认属性的模块对象)。
结果表明,它有细微差别。因为此库
react本地化
,是从babel传输的,根据中的Anders解释,babel正在这样做:
module.exports=exports[“default”];
将整个模块设置为函数,该函数在Typescript中的默认导入下尝试执行此操作:
function(){…}。默认值
实际上是
未定义的
。因此,需要从'Thing
导入*作为对象。删除此行
module.exports=exports[“default”];
允许typescript有效地:
{default:}.default
aka:
从“Thing”导入Thing
@adam venturella是的,谢谢你提出这个问题。不幸的是,我没有样板文件来处理真正的Babel结果。如果我的答案不相关,我很抱歉