不能将类型…分配给…不存在属性xxx

chakra的Box组件

一般出现在给第三方组件添加额外属性的时候。

比如我先给 「chakra-ui/react」组件Box添加一个自定义属性,怎么添加类型呢?

  1. import { Box } from '@chakra-ui/react'
  2. <Box customProp={xx}>

这时候肯定是报错的,因为Box的类型没有 customProp,如果我想给它加一个,怎么加呢?还没什么好办法

❌ 如果在一个全局的.d.ts里去重新定义module,就直接覆盖了,而除了Box的其他组件没有被正确导出。

  1. // 全局覆盖了
  2. declare module "@chakra-ui/react" {
  3. // interface Box { folded?: boolean}
  4. export const Box: _chakra_ui_system.ChakraComponent<"div", { folded?: boolean}>;
  5. // 这样不行,不能导出其他组件,只有Box是可用的
  6. // import * as Chakra from '@chakra-ui/react'
  7. // export default Chakra
  8. }

这个方式目前不行。

Box的定义是这样的:

  1. declare const Box: _chakra_ui_system.ChakraComponent<"div", {}>;

❌ 如果用这种方式:

  1. <Box<_chakra_ui_system.ChakraComponent<'div', { customProp?: boolean }>> customProp={xxx} test1111={1111}></Box>

好像破坏了Box的类型检查,除了customProp不报错了,test1111 也不报错了。

issue里,有提到

I want to be able to extend the default Chakra Box with custom props/hooks/whatever and later use those extensions in any of the components that the Box composes
开发者表示不行。 所以,除了用一个自定义组件去封装Box,没有其他办法了吗? 感觉有,只是现在我还不知道。