我的问题来自于尝试将TypeScript类型定义.d.ts
添加到第三方库。请记住,我不控制这个库,我只是尝试使用它并安抚tsc编译器。
在此阅读指南re:撰写d.ts
个文件:
https://typescript.codeplex.com/wikipage?title=Writing%20Definition%20%28.d.ts%29%20Files
我正在看这个具体的例子:新的+可调用的方法
此处,文档显示以下模式:
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;
}
这里值得注意的例外是文档版本不使用declare module
。除此之外,就我而言,这些应该是相同的产量,类似的结果;我显然遗漏了一些东西。我得到了以下错误:
错误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
}
有人可以向我解释为什么会这样,但export default
最终会返回undefined
吗?另外,我必须像下载这样导入:
import * as LocalizedStrings from 'react-localization'
我更喜欢以import LocalizedStrings from 'react-localization
进行导入。在这一点上,我会和前者一起生活,我只是想明白为什么。
答案 0 :(得分:0)
解决方案是:
react-localization.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;
}
yourFile.ts
import LocalizedStrings from 'react-localization';
var x = new LocalizedStrings(123);
如果您想使用export =
,则应使用import = require()
。 https://www.typescriptlang.org/docs/handbook/modules.html