侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计创建 6 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

TypeScript中属性点 | TypeScript

Administrator
2023-12-10 / 0 评论 / 0 点赞 / 65 阅读 / 4241 字

1. TypeScript 中的问号 ? 与感叹号 !的含义

1.1 ?(问号)操作符

TypeScipt 里面,有4个地方会出现问号操作符,他们分别是:

  1. 三元运算符

    const a = isNumber(input) ? input : String(input);
  2. 参数

    // 这里的 ?表示这个参数 field 是一个可选参数
    function getUser(user: string, field?: string) { }
  3. 成员

    // 这里的?表示这个name属性有可能不存在
    class A {
      name?: string
    }
    ​
    interface B {
      name?: string
    }
  4. 安全链式调用

    // 这里 Error对象定义的stack是可选参数,如果这样写的话编译器会提示
    // 出错 TS2532: Object is possibly 'undefined'.
    return new Error().stack.split('\n');
    ​
    // 我们可以添加?操作符,当stack属性存在时,调用 stack.split。若stack不存在,则返回空
    return new Error().stack?.split('\n');
    ​
    // 以上代码等同以下代码
    const err = new Error();
    return err.stack && err.stack.split('\n');

1.2 !(感叹号)操作符

TypeScript里面有3个地方会出现感叹号操作符,他们分别是:

  1. 一元运算符 (取反)

    const a = !isNumber(input);
  2. 成员

    // 因为接口B里面name被定义为可空的值,但是实际情况是不为空的,那么我们就可以
    // 通过在class里面使用!,重新强调了name这个不为空值
    class A implemented B {
      name!: string
    }
    ​
    interface B {
      name?: string
    }
  3. 强制链式调用

    // 这里 Error对象定义的stack是可选参数,如果这样写的话编译器会提示
    // 出错 TS2532: Object is possibly 'undefined'.
    new Error().stack.split('\n');
    ​
    // 我们确信这个字段100%出现,那么就可以添加!,强调这个字段一定存在
    new Error().stack!.split('\n');
    // hasRoute(a:RouteRecordName); to.name的类型可能为:RouteRecordName | undefined | null 则会报错
    // 通过 ! 强制处理不为空
    const hasRoute = router.hasRoute(to.name!);

2. TS高级类型 Partial 使用

借鉴:

  1. Partial

    • 将T中的所有属性设置为可选

     <!-- 源码 -->
      type Partial<T> = {
          [P in keyof T]?: T[P];
      };
    • keyof T 获取 T 的所有属性

    • ? 可选参数

      interface IPeople {
          name:string,
          age?: number,
          sex: string,
        }
        type TPartial = Partial<IPeople>
        
        // 等同于
        type TPartial = {
          name?: string | undefined;
          age?: number | undefined;
          sex?: string | undefined;
        }

TS高级类型]

TypeScript中的keyof、typeof、索引访问类型、条件类型


0

评论区