typescript高阶特性一 —— 合并类型(&)

typescript高阶特性一 —— 合并类型(&),第1张

一、环境支持

安装typescript环境和ts-node:

npm install -g typescript
npm install -g ts-node

实际 *** 作:

ts-node xx.ts
二、&交叉类型

交叉类型就是把两种类型组合起来,下列是正常的交叉组合

interface Name {
    firstName: string;
    lastName: string;
  }
  
  interface BaseInfo {
    sex: 'male' | 'female';
    age: number;
  }
  
  type UserInfo = Name & BaseInfo;
  const user: UserInfo = {
    firstName: 'Jack',
    lastName: 'Ma',
    sex: 'male',
    age: 18
  };
  

展示错误的类型

interface Props1 {
    size: string;
}
interface Props2 {
    size: number;
}
type Props = Props1 & Props2
let props: Props = {
    size: 'kang'
}

上面用&交叉类型很明显会生成一个既是字符串,也是数组的类型即是never类型

type Props = {
    size: string & number
}

下面我们看一串代码exhaustiveCheck为什么会报错:

type AllType = 'a' | 'b' | 'c'
function handleValue(val: AllType) {
    switch (val) {
        case 'a':
            // val 在这里收窄为 'a'
            break;
        case 'b':
            // val 在这里收窄为 'b'
            break;
        default:
            // val 在这里收窄为 never
            const exhaustiveCheck: never = val;
            break;
    }
}

原因是:我们这边val只可以是’c’也可能是never,改成这样就不会报错了!

type AllType = 'a' | 'b'
function handleValue(val: AllType) {
    switch (val) {
        case 'a':
            // val 在这里收窄为 'a'
            break;
        case 'b':
            // val 在这里收窄为 'b'
            break;
        default:
            // val 在这里收窄为 never
            const exhaustiveCheck: never = val;
            break;
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1320492.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-11
下一篇 2022-06-11

发表评论

登录后才能评论

评论列表(0条)

保存