Typescript 2.6 -> 使用模块扩充扩展外部库的类型定义 -> TS2339: 属性 '' 在类型 '' 上不存在
Typescript 2.6 -> Extend type definition for external library with module augmentation -> TS2339: Property '' does not exist on type ''
我正在使用库 material-ui
,目前 运行正在使用 v1.0.0-beta
。他们昨天将库更新为 v1.0.0-beta.28
,但没有更新类型定义,因此我的代码在 运行 时失败,但在编译时没有。
来自 Chrome:
webpack-internal:///./node_modules/material-ui/styles/colorManipulator.js:80
Uncaught TypeError: Cannot read property 'charAt' of undefined
at decomposeColor (webpack-internal:///./node_modules/material-ui/styles/colorManipulator.js:80)
at lighten (webpack-internal:///./node_modules/material-ui/styles/colorManipulator.js:226)
at createPalette (webpack-internal:///./node_modules/material-ui/styles/createPalette.js:144)
at Object.createMuiTheme (webpack-internal:///./node_modules/material-ui/styles/createMuiTheme.js:71)
at StartPage.render (webpack-internal:///./Features/Client/StartPage/index.tsx:106)
at finishClassComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:7873)
at updateClassComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:7850)
at beginWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:8225)
at performUnitOfWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:10224)
at workLoop (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:10288)
https://github.com/mui-org/material-ui/releases/tag/v1.0.0-beta.28
查看发行说明,我可以看到 palette
对象已更改 primary
和 secondary
颜色,这是一个重大更改。
然后我阅读了有关 module augmentation
的内容,并尝试在需要新属性的情况下扩展 Color
对象。
https://github.com/Microsoft/TypeScript/issues/10859#issuecomment-246496707
http://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
我是这样扩展的:
import { Color } from 'material-ui'
declare module 'material-ui' {
export interface Color {
light?: string
main?: string
dark?: string
}
}
Visual Studio 将其拾取并构建,但是当我尝试 运行 webpack
时,出现以下错误:
TS2339: Property 'main' does not exist on type 'Color'.
为什么会这样?
原来错误来自使用共享项目,并且由于此类型定义未正确加载,即使 module augmentation
也存在于共享项目中。将不得不检查我们的结构,因为它可能会在未来导致更多错误。
我正在使用库 material-ui
,目前 运行正在使用 v1.0.0-beta
。他们昨天将库更新为 v1.0.0-beta.28
,但没有更新类型定义,因此我的代码在 运行 时失败,但在编译时没有。
来自 Chrome:
webpack-internal:///./node_modules/material-ui/styles/colorManipulator.js:80 Uncaught TypeError: Cannot read property 'charAt' of undefined at decomposeColor (webpack-internal:///./node_modules/material-ui/styles/colorManipulator.js:80) at lighten (webpack-internal:///./node_modules/material-ui/styles/colorManipulator.js:226) at createPalette (webpack-internal:///./node_modules/material-ui/styles/createPalette.js:144) at Object.createMuiTheme (webpack-internal:///./node_modules/material-ui/styles/createMuiTheme.js:71) at StartPage.render (webpack-internal:///./Features/Client/StartPage/index.tsx:106) at finishClassComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:7873) at updateClassComponent (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:7850) at beginWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:8225) at performUnitOfWork (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:10224) at workLoop (webpack-internal:///./node_modules/react-dom/cjs/react-dom.development.js:10288)
https://github.com/mui-org/material-ui/releases/tag/v1.0.0-beta.28
查看发行说明,我可以看到 palette
对象已更改 primary
和 secondary
颜色,这是一个重大更改。
然后我阅读了有关 module augmentation
的内容,并尝试在需要新属性的情况下扩展 Color
对象。
https://github.com/Microsoft/TypeScript/issues/10859#issuecomment-246496707
http://www.typescriptlang.org/docs/handbook/declaration-merging.html#module-augmentation
我是这样扩展的:
import { Color } from 'material-ui'
declare module 'material-ui' {
export interface Color {
light?: string
main?: string
dark?: string
}
}
Visual Studio 将其拾取并构建,但是当我尝试 运行 webpack
时,出现以下错误:
TS2339: Property 'main' does not exist on type 'Color'.
为什么会这样?
原来错误来自使用共享项目,并且由于此类型定义未正确加载,即使 module augmentation
也存在于共享项目中。将不得不检查我们的结构,因为它可能会在未来导致更多错误。