当前位置: 首页 > news >正文

小程序api调用/seo职位描述

小程序api调用,seo职位描述,邢台网站建设 冀icp备,阿里巴巴网站怎样做的漂亮聊聊 TypeScript 中的类型保护在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况:interface Bird {// 独有方法fly();// 共有方法layEggs();}interface Fish {// 独有方法swim();// 共有方法layEggs();}function getSmallPet(): Fish | Bird {//…

聊聊 TypeScript 中的类型保护

在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况:

interface Bird {

// 独有方法

fly();

// 共有方法

layEggs();

}

interface Fish {

// 独有方法

swim();

// 共有方法

layEggs();

}

function getSmallPet(): Fish | Bird {

// ...

}

let pet = getSmallPet();

pet.layEggs(); // 正常

pet.swim(); // ts 报错

如上所示,getSmallPet 函数中,既可以返回 Fish 类型的对象,又可以返回 Bird 类型的对象。由于返回的对象类型不确定,所以使用联合类型对象共有的方法时,一切正常,但是使用联合类型对象各自独有的方法时,ts 会报错。

那么如何解决这个问题呢?最粗暴的方法当然是将联合类型转换为 any,不过这种方法不值得提倡,毕竟我们写的是 TypeScript 而不是 AnyScript。

此时,我们使用今天的主角——类型保护,闪亮登场,它可以完美的解决这个问题。

孔乙己说过,茴香豆有四种写法,同理,实现类型保护,也有四种写法。

类型断言

类型断言是最常用的一种类型保护方法,即直接指定类型。由于,TypeScript 中识别的类型大多是靠 TypeScript 的自动类型推算算出来的,所以会出现上面所说的那种问题,即 TypeScript 不知道具体对象类型是什么,所以不确定有没有联合类型各自独有的方法。

当使用类型断言直接指定类型时,相当于你让 TypeScript 开启了上帝模式,可以直接知道具体类型是联合类型中的那个,此时再使用对象的独有方法就符合 TypeScript 的推断了。

interface Bird {

// 独有方法

fly();

// 共有方法

layEggs();

}

interface Fish {

// 独有方法

swim();

// 共有方法

layEggs();

}

function getSmallPet(): Fish | Bird {

// ...

}

let pet = getSmallPet();

pet.layEggs(); // 正常

// 通过鸭子类型来进行判断

if ((pet as Bird).fly) {

// 类型断言

(pet as Bird).fly()

} else {

// 类型断言

(pet as Fish).swim()

}

如果嫌弃通过 as 来进行类型断言不够上流,还可以使用类泛型的写法,即:

let pet = getSmallPet();

pet.layEggs(); // 正常

// 通过鸭子类型来进行判断

if ((pet).fly) {

(pet).fly()

} else {

(pet).swim()

}

tips:友情提示,虽然使用类泛型写法进行类型断言看起来高端一些,但是由于在 tsx 中语法存在歧义,所以为了统一起见,推荐使用 as 的方法进行类型断言。

in 语法

在 JS 中,我们经常使用 in 语法来判断指定的属性是否在指定的对象或其原型链中。

同理,在 TypeScript 中,我们可以通过这种方法确认对象类型。

interface Bird {

// 独有方法

fly();

// 共有方法

layEggs();

}

interface Fish {

// 独有方法

swim();

// 共有方法

layEggs();

}

function getSmallPet(): Fish | Bird {

// ...

}

let pet = getSmallPet();

pet.layEggs(); // 正常

// 使用 in 语法进行类型保护

if ('fly' in pet) {

pet.fly()

} else {

pet.swim()

}

原理同类型断言一样,都是引导 TypeScript 的类型推断,确定对象类型。

instanceof 语法

当联合类型中使用的是 class 而不是 interface 时,instanceof 语法就派上用场了,通过 instanceof 语法可以区分不同的 class 类型。

class Bird {

// 独有方法

fly() {};

// 共有方法

layEggs() {};

}

class Fish {

// 独有方法

swim() {};

// 共有方法

layEggs() {};

}

function getSmallPet(): Fish | Bird {

// ...

}

let pet = getSmallPet();

pet.layEggs(); // 正常

// 使用 in 语法进行

if (pet instanceof Bird) {

pet.fly()

} else {

pet.swim()

}

typeof 语法

typeof 语法不同于 in 语法以及 instanceof 语法,in 语法以及 instanceof 语法都是用来引导类型推断进行不同对象类型推断,而 typeof 语法常用于基本类型的推断(或者是联合使用基本类型和对象类型)。

简而言之,当使用 typeof 能够区分联合类型中的不同类型时,即可使用它。

function getSmallPet(): number | string {

// ...

}

let pet = getSmallPet();

if (typeof pet === 'number') {

pet++

} else {

pet = Number(pet) + 1

}

总结

就如茴香豆的四种写法的本质依然是茴香豆一样,类型保护的四种写法的本质也是一样的,即,引导 TypeScript 中的类型推断将类型推断的多选题变为单选题,这就是类型保护的本质。

http://www.jmfq.cn/news/5266297.html

相关文章:

  • html免费网站模板/seo关键词优化软件app
  • 网站防护找谁做/关键词排名seo
  • 网站建设的十点优势/福州seo招聘
  • 合肥企业网站建设哪个好/厦门人才网最新招聘信息网
  • 做网站需要什么电脑配置/深圳做网站
  • wordpress 内容摘要/牛排seo
  • 封面型网页网站有哪些/宁波百度seo点击软件
  • 乳山网站开发/百度权重划分等级
  • 管理网站怎么做的/谷歌浏览器网页版
  • 公司网站模板最新/夸克搜索引擎入口
  • 如何选择武进网站建设/石家庄seo关键词
  • 做网站需要什么专业/站长工具域名
  • 电脑网站建设策划书/网络推广都有哪些方式
  • 网站信息推广的策略有哪些/百度平台商家联系方式
  • 做yield网站多少钱/上海搜索推广
  • 英文网站建设目的/山东seo
  • 学美工大概要多少学费/站长网站优化公司
  • 手机wap版网站制作/网页制作的软件有哪些
  • 怎样做网站的背景图片/天津seo外包
  • 西安企业网站建设哪家好/外链代发软件
  • 新乡网站建设waterseo/seo推广软件排行榜前十名
  • 网页设计教程完整/西安网站seo哪家公司好
  • 合肥电商网站开发/青海seo技术培训
  • 太原做网站的/软件开发流程八个步骤
  • 做网站的编程语言/5118网站如何使用免费版
  • 网站建设gongsi/seochinaz查询
  • 南宁良庆网站建设/宁波seo网络推广咨询价格
  • 网站结构是什么 怎么做/品牌营销活动策划方案
  • html网页制作下载/seo网络优化专员是什么意思
  • 怎么做网站底部文件/百度推广登录账号首页