React.FC 的衍生问题

来源:3-3 第一个组件 - ts为组件助力

ywang04

2021-01-28

老师 在实际项目中使用React.FC 遇到了如下问题

interface SubHeadingProps {
 title: string;
 ...... //其他props
}

const SubHeading: FC<SubHeadingProps> = ({ title }) => {
 return <div>SubHeading</div>
}

SubHeading.legacyName = 'ux-sub-heading';
export default  SubHeading;

我们需要指明SubHeading对应的之前legacy component名字是什么 这里是ux-sub-heading
其实多一个legacyName这个prop对代码没有什么实质影响 只是对开发人员的一个提示
但是导致的问题是 vscode会报 Property ‘legacyName’ does not exist on type ‘FC’. ts(2339).

请问如果不想将legacyName添加到interface里去并且还想保留 SubHeading.legacyName = ‘ux-sub-heading’; 并且依旧使用FC的前提下 还有什么办法可以解决 Property ‘legacyName’ does not exist on type ‘FC’. ts(2339). 这个错误呢?

https://stackoverflow.com/questions/58867121/ts2339-property-whydidyourender-does-not-exist-on-type-fcbuttonprops 这个里面的解决方案我觉得并不完美 不知道老师有没有更好的解决方案。谢谢

写回答

1回答

张轩

2021-01-29

同学你好 这个只能用一个别名来覆盖或者修改原始的 FC 类型了。比如

  import { FC } from 'react';  
  export type FCWithLegacy<P = {}> = FC<P> & {
    legacyName?: string
  };


0
2
ywang04
谢谢老师 请问 P 是指代props吗?
2021-01-30
共2条回复

React18+TS高仿AntD从零到一打造组件库

设计,开发,测试,发布再到 CI/CD,从0到1造轮子

2124 学习 · 959 问题

查看课程