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