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 对象已更改 primarysecondary 颜色,这是一个重大更改。

然后我阅读了有关 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 也存在于共享项目中。将不得不检查我们的结构,因为它可能会在未来导致更多错误。