为了账号安全,请及时绑定邮箱和手机立即绑定

【备战春招】第6天 专为小白设计的TypeScript入门课——基础篇

课程名称

课程章节

第2章 TypeScript 基础语法入门

  • 2-10 类型收窄
  • 2-11 使用类型陈述语法实现类型收窄

课程讲师

课程内容

  • 对象类型解构

  • 变量类型以定义变量时的类型为准

  • 使用类型陈述语法实现类型收窄

    • In 语法下的类型收窄
    • InstanceOf 语法下的类型收窄
    • 类型陈述语法

课程收获

TS对象类型解构

function getOjbectValue({a, b}){
  return a + b;
}
getOjbectValue({a: '1', b: '2'});

解构的类型定义错误写法:
图片描述
正确写法:
图片描述

// 对象类型解构的代码怎么写
function getOjbectValue({a, b}: {a: string, b: string}){
  return a + b;
}
getOjbectValue({a: '1', b: '2'});

TS变量类型以定义变量时的类型为准

// 变量类型以定义变量时的类型为准
let userName: string | number = '123';
userName = 123;

再赋值改类型会报错。
图片描述

// 变量类型以定义变量时的类型为准
let userName = '123';
userName = '123';

默认推断为string类型
图片描述
再赋值改类型会报错。
图片描述

TS的In 语法下的类型收窄
通过 in 判断语句,注意这里是字符串,判断是否是其中一个类型。

type Fish = {
  swim: () => {}
}

type Bird = {
  fly: () => {}
}

// In 语法下的类型收窄
function test(animal: Fish | Bird) {
  if('swim' in animal) {
    return animal.swim();
  }
  return animal.fly();
}

类型收窄 =>
图片描述
图片描述

TS的InstanceOf 语法下的类型收窄
param如果是Date实例的话,进行类型收窄。

// InstanceOf 语法下的类型收窄
function test1(param: Date | string) {
  if(param instanceof Date) {
    return param.getTime();
  }
  return param.toUpperCase();
}

TS的类型陈述语法
类型收窄主要出现在if、switch、while等控制流语句当中,ts能实现这种类型收窄,底层的机制就是对控制流进行分析,通过我们设置的条件进行分析,分析后帮助做类型收窄。

type Fish = {
  swim: () => {}
}

type Bird = {
  fly: () => {}
}

function isFish(animal: Fish | Bird): boolean {
  if(animal.swim) {
    return true
  }
  return false;
}

function test2(animal: Fish | Bird) {
  if(isFish(animal)) {
    return animal.swim();
  }
  return animal.fly();
}

报错,有可能Bird上不存在swim。
图片描述
利用断言假设animal是一个Fish,进行存在和不存在的判断。

function isFish(animal: Fish | Bird): boolean {
  if((animal as Fish).swim !== undefined) {
    return true
  }
  return false;
}

function test2(animal: Fish | Bird) {
  if(isFish(animal)) {
    return animal.swim();
  }
  return animal.fly();
}

test2方法中并没有对animal进行类型收窄,因此自己写函数是不能实现类型收窄的。
图片描述
想要函数实现类型收窄,需要加: animal is Fish,这种语法称为类型陈述。
返回类型为一个类型陈述,则这个函数就具备了一个在控制流程里帮助我们实现类型收窄的能力了。

// animal is Fish 叫做类型陈述语法
function isFish(animal: Fish | Bird): animal is Fish {
  if((animal as Fish).swim !== undefined) {
    return true
  }
  return false;
}

function test2(animal: Fish | Bird) {
  if(isFish(animal)) {
    return animal.swim();
  }
  return animal.fly();
}

图片描述

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消