我正在使用babel-plugin-react-intl-auto
和TypeScript。
此软件包已在lib/types.d.ts中定义了类型(使用npm安装时,它在lib中)。这些会覆盖其他软件包的类型。
import { FormattedMessage } from 'react-intl'
declare module 'react-intl' {
interface ExtractableMessage {
[key: string]: string
}
export function defineMessages<T extends ExtractableMessage>(
messages: T
): { [K in keyof T]: FormattedMessage.MessageDescriptor }
}
他们已在package.json
中指定了此内容{
// ...
"types": "lib/types.d.ts",
// ...
}
一切似乎都很好。但是,当我使用此程序包时,TypeScript抱怨defineMessages
的功能签名。
如果我将这些类型复制到我自己的 index.d.ts 中,它将按预期工作。
为了完整起见,这是我的 tsconfig.json :
{
"compilerOptions": {
"noEmit": true,
"noImplicitAny": true,
"esModuleInterop": true,
"jsx": "react",
"lib": ["es5", "es6", "dom"]
}
}
为什么TypeScript不使用这些类型?
答案 0 :(得分:1)
这很可能是因为TypeScript没有关于要使用的defineMessages
版本的上下文。
TypeScript支持merging declarations,在导入模块时也会应用。
将babel-plugin-react-intl-auto
与react-intl
一起导入应合并这些定义,以使TypeScript能够理解这两种语法。