• 在ts中val is Map是什么意思呢?


    最近在学习vue3的源码,顺便也在学习ts,就记录一下自己学习中的困惑吧
    在这里插入图片描述

    export const isArray = Array.isArray
    export const isMap = (val: unknown): val is Map<any, any> =>
      toTypeString(val) === '[object Map]'
    export const isSet = (val: unknown): val is Set<any> =>
      toTypeString(val) === '[object Set]'
    
    export const isDate = (val: unknown): val is Date => toTypeString(val) === '[object Date]'
    export const isFunction = (val: unknown): val is Function =>
      typeof val === 'function'
    export const isString = (val: unknown): val is string => typeof val === 'string'
    export const isSymbol = (val: unknown): val is symbol => typeof val === 'symbol'
    export const isObject = (val: unknown): val is Record<any, any> =>
      val !== null && typeof val === 'object'
    
    export const isPromise = <T = any>(val: unknown): val is Promise<T> => {
      return isObject(val) && isFunction(val.then) && isFunction(val.catch)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    is ,官方解释:是一种类型推断表达式的关键字, 通过和函数返回值的比较, 从而"缩小"参数的类型范围一般会用在类型判断的函数中,类似上面这些,isArray 、 isObject等,基本都是以isxxx开头的函数,

    export const isString = (val: unknown): val is string => typeof val === 'string'
    
    • 1

    函数的返回值类型为val is string,isString返回值为true的时候, 参数val就是string类型
    返回值类型为什么不能直接写成boolean?

    let str: string | null = Math.random() > 0.1 ? 'str' : null
    if (isString(str)) {
      str.split()
    }
    
    • 1
    • 2
    • 3
    • 4

    因为如果写成这样,ts无法推测str是否有split方法,str也可能为null,就会报错
    在这里插入图片描述

    感谢知乎一大哥指点迷经,特此记录该文,点击跳转

  • 相关阅读:
    【BOOST C++】教程2:最简程序段(Hello World)
    神经网络量化
    第11章 初识IdentityServer4
    Redis 实现持久化
    C++ 内存管理 - primitives - 侯捷
    织梦CMS采集插件-DEDE插件大全
    【C语言】入门——结构体
    史上最强手机SoC,A17 PRO处理器
    一个未经压缩的图片(bmp)的大小
    React Native读取系统属性
  • 原文地址:https://blog.csdn.net/zhongqw_00/article/details/133912532