问答

TypeScript联合类型,参数如何直接使用?

作者:admin 2021-06-07 我要评论

interface FatherProps { data?: string[];}interface SonProps { data: string[];}const Father: React.FCFatherProps = (props) = { return ( Son data={props...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
interface FatherProps {
    data?: string[];
}
interface SonProps {
    data: string[];
}

const Father: React.FC<FatherProps> = (props) => {
    return (
        <Son data={props.data as string[]}></Son>
    )
}

const Son: React.FC<SonProps> = (props) => {
    return (
        <div>son son son</div>
    )
}

除了使用as外还有其它好用的方法么?

看到其它组件源码这种可选参数 是直接使用的

###

知道了问题所在了,
image.png
源码中有个默认值操作,那么解决问题应该就只有两个了

  • 使用as
  • 添加默认值

再添加一种方式,修改tsconfig.json配置

"strictNullChecks": false,

关闭严格空值检查即可,react component 组件源码中也是如此处理的

###

你的Son组件的data是必须参数,而Father组件的data是可选参数,是不能直接传给Son组件的。

这两个interface写成下面这种形式,也许你就理解了

interface FatherProps {
    data: string[] | undefined;
}
interface SonProps {
    data: string[];
}

很明显,类型不兼容,所以你是用了as进行强制类型转换后,才能绕过类型检查。

如果你想要问的是其它的绕过类型检查的写法,除了as之外,还可以进行判断:props.data || [],或者另外一种强制转换类型的语法<string[]>props.data

data: string[]可以兼容data?: string[],但是反过来不行。如果还不清楚的话建议看看typescript文档。

如果对你有帮助,请点个采纳点个赞,谢谢?

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • Eventloop 是什么?是为了解决什么问题

    Eventloop 是什么?是为了解决什么问题

  • 关于JS中的闭包,求解答

    关于JS中的闭包,求解答

  • 有没有通过韵母查汉字的api?

    有没有通过韵母查汉字的api?

  • 假设接收方一直不从接收缓冲区读数据,

    假设接收方一直不从接收缓冲区读数据,

腾讯云代理商
海外云服务器