TS的踩坑之路(一)

一、获取对象中的value报错

代码示例

在这里插入图片描述

报错信息

在这里插入图片描述

解决方法

定义CardClassObj interface 类型, 获取值使用 cardClassObj[arr[0] as keyof typeof cardClassObj];

const getCardClassName = (detailInfo: DetailInfo, obj: Obj) => {
    const { Status } = detailInfo;
    interface CardClassObj {
        Alert: {
            className: string,
            name: string,
        },
        Unhealthy: {
            className: string,
            name: string,
        },
        Healthy:{
            className: string,
            name: string,
        },
        Inactive: {
            className: string,
            name: string,
        },
        Active: {
            className: string,
            name: string,
        },
        Unknown: {
            className: string,
            name: string,
        },
    }
    const cardClassObj: CardClassObj = {
        Alert: {
            className: 'status redState',
            name: obj.alert,
        },
        Unhealthy: {
            className: 'status orangeState',
            name: obj.unhealthy,
        },
        Healthy: {
            className: 'status greenState',
            name: obj.healthy,
        },
        Inactive: {
            className: 'status redState',
            name: obj.inactive,
        },
        Active: {
            className: 'status greenState',
            name: obj.active,
        },
        Unknown: {
            className: 'status grayState',
            name: obj.unknown,
        },
    };
    const cardClassObjKeys = Object.keys(cardClassObj);
    const arr = cardClassObjKeys.filter((item) => Status === item);
    if (arr.length > 0) {
        return cardClassObj[arr[0]as keyof typeof cardClassObj];
    }
    return cardClassObj.Unknown;
}

二、 定义默认值报错

代码示例

在这里插入图片描述

报错信息

Property ‘deviceId’ does not exist on type ‘never’.

解决办法

默认值修改为 [ ] as any[ ]
const [newList, setNewList] = useState([] as any[]);

三、父子组件传参定义报错

代码示例

在这里插入图片描述

报错信息

(property) openFlag: boolean
Type ‘{ openFlag: boolean; updateOpenFlag: Dispatch<SetStateAction>; }’ is not assignable to type ‘IntrinsicAttributes & Omit<WrappedComponentProps<“intl”>, “intl”> & { forwardedRef?: Ref | undefined; }’.
Property ‘openFlag’ does not exist on type ‘IntrinsicAttributes & Omit<WrappedComponentProps<“intl”>, “intl”> & { forwardedRef?: Ref | undefined; }’.ts(2322)

解决办法

在子组件中定义interface 接口参数类型
子组件
在这里插入图片描述

点击跳转参考详细链接

四、绑定click 事件报错

代码示例

在这里插入图片描述

报错信息

Type ‘void’ is not assignable to type ‘MouseEventHandler | undefined’.ts(2322)
index.d.ts(1479, 9): The expected type comes from property ‘onClick’ which is declared here on type ‘DetailedHTMLProps<HTMLAttributes, HTMLDivElement>’

解决办法

点击事件变为箭头函数的格式
在这里插入图片描述

五、全局没有定义类型报错

在这里插入图片描述

报错信息

Property ‘REDUX_DEVTOOLS_EXTENSION_COMPOSE’ does not exist on type ‘Window & typeof globalThis’.

解决办法

你可以创建一个文件 src/types/global.d.ts

export {};

declare global {
  interface Window {
    __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: Function;
  }
}

然后在 tsconfig.json 文件中确认有下面的命令

  "include": [
    "src/**/*"
  ]
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值