上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

vue3 提取props定义出现问题原理分析

[复制链接]
  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-7-14 09:47:24 | 显示全部楼层 | 阅读模式

    严重警告

    本内容超标我的个人能力极大
    不对任何资料和文字的正确性抱有期待!

    问题回溯

    当我们在props书写定义的时候可以发现有正确的required推断
    图片.png
    图片.png
    而如果在外部则required推断失效了
    图片.png
    查看类型可知是required的类型从boolean变成了true
    图片.png
    我们可以通过添加as const来进行一下类型缩窄(type narrow)
    图片.png
    那么为什么vue自身能对其进行缩窄?
    官方给出的答案是

      // the Readonly constraint allows TS to treat the type of { required: true }
      // as constant instead of boolean.

    常量readonly限制允许ts推测{required:true}的类型作为一个常量代替boolean类型

    这里我个人理解的话是可能出错了!!!

    我们可以编写代码
    图片.png
    图片.png
    可以看到这时候是一个boolean类型
    而如果加一个泛型extends继承语法呢
    图片.png
    变成了
    图片.png
    关于这个问题是TS的推断
    具体可以参考
    https://stackoverflow.com/questions/67070250/typescript-class-generic-type-is-too-narrow-if-extends-something-else-is-not
    大致意思是如果不加extends,会推断出更通用的类型
    如果加了extends,会基于继承的类型尝试推断出来更具体的类型
    所以会从boolean直接改为true
    注意一点
    就是如果我们把一个类型赋值给一个变量
    再往参数里传入该变量
    此时是执行的检查类型的功能,而不会尝试更具体的去推断类型
    那么我们基本了解了prop以及typescript extends type narrow问题

    结语

    我写这个慌得一批

    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
  • TA的每日心情
    开心
    前天 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4196

    回帖

    4061

    积分

    管理员

    积分
    4061

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-7-14 11:28:25 | 显示全部楼层
    快去反馈
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-10-28 07:07
  • 签到天数: 193 天

    [LV.7]常住居民III

    712

    主题

    5966

    回帖

    6763

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6763

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2022-7-14 11:41:29 | 显示全部楼层

    呜呜呜
    主要我怕是我们自己错了
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.net/a/lihengdao666
    个人宣言:この世界で私に胜てる人とコードはまだ生まれていません。死ぬのが怖くなければ来てください。
    回复

    使用道具 举报

  • TA的每日心情
    开心
    前天 13:37
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4196

    回帖

    4061

    积分

    管理员

    积分
    4061

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-7-14 11:55:08 | 显示全部楼层
    李恒道 发表于 2022-7-14 11:41
    呜呜呜
    主要我怕是我们自己错了

    不反馈,你永远不知道是你错了,还是他错了
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表