在学C/C++  Java等强类型语言时,变量类型是唯一的,需要先指定。PHP JavaScript等弱类型语言时,无需指定变量类型

但是,TypeScript里面的联合类型 (Union Type) 和字面量类型 (Literal Type),为了真香定律,还是琢磨下

类型别名

类型别名用来给一个类型起个新名字,使用 type 创建类型别名,类型别名常用于联合类型。

type nameStr = string;
type nameArr = string[];
type nameType = nameStr | nameArr;

在实际应用中,有些类型名字比较长或者难以记忆,重新命名是一个较好的解决方案。

联合类型-Union Type

联合类型表示的值可能是多种不同类型当中的某一个。比如,A | B 联合类型的某个值就可能是 A 类型,也可能是 B 类型。很显然,联合类型放宽了类型的取值的范围,也就是说值的范围不再限于某个单一的数据类型。同时,它也不是无限制地放宽取值的范围,如果那样的话,完全可以使用 any 代替。

type SeriesOfTypes = string | number | boolean | Error;

提示:我们在创建联合类型的时候,可以使用 type 关键字为自定义的联合类型加上别名,这样可以避免我们重复它们的定义

字面量类型-Literal Type

字面量也就是 JavaScript 基元类型具体的值。而在 TypeScript 中,我们可以将字面量作为一种自定义的类型,这种类型被称为字面量类型。比如:

type China = 'China';
let country: China = 'China';  // ok
country = 'America';  // error: Type '"America"' is not assignable to type '"China"'

结合上面所了解到的联合类型,我们可以将自定义的字面量类型组合成一个新的联合类型:

type Weekdays = 1 | 2 | 3 | 4 | 5;

let day: Weekdays = 1;  // ok
day = 5;  // ok
day = 6;  // error: Type '6' is not assignable to type 'Weekdays'.

字面量联合类型的形式与枚举类型有些类似,所以,如果您仅是使用数字,可以考虑是否使用给具有表达性的枚举类型。

类型推论

上面说到没有指定类型的变量默认为any类型的,但是当声明变量时定义了该变量值,则默认变量为该值得类型值,这就是类型推论

let anyThing = 'string'
anyThing=10 // error  Type '10' is not assignable to type 'string'.

若声明时未定义,则不会

let anyThing
anyThing='string'
anyThing=10 // ok

类型推论常会成为新手的绊脚石

类型断言

可以用来绕过编译器的类型推断,手动指定一个值的类型。

有时还我们还不知道一个值的类型,导致在开发过程中总是报一些令人头痛的类型错误。使用断言,简单来说就是先做好一个假设,使得编译通过。

语法有下面两种

  1. <类型>值

  2. 值 as 类型

推荐第二种,因为 jsx 这样的语法中只支持 as 方式。

function func(val: string | number): number {
  if ((val as string).length) {
    return (val as string).length
  } else {
    return val.toString().length
  }
}

类型断言更像是类型的选择,而不是类型转换

转载本站文章《TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/typescript/2018_0411_8369.html

TS数据类型:类型别名/联合类型/字面量类型/类型推论等纲要的更多相关文章

  1. 04_Swift2基础之类型安全和类型推测+字面量+类型别名

    1. 类型安全和类型推测 1> 类型安全 Swift 是一个 _类型安全(type safe)_ 的语言.类型安全的语言可以让你清楚地知道代码要处理的值的类型.如果你的代码需要一个`String ...

  2. 精通awk系列(15):awk数据类型和字面量

    回到: Linux系列文章 Shell系列文章 Awk系列文章 数据类型 gawk有两种基本的数据类型:数值和字符串.在gawk 4.2.0版本中,还支持第三种基本的数据类型:正则表达式类型. 数据是 ...

  3. TypeScript type 类型别名

    //6,类型别名 /**类型别名不能出现在声明右侧的任何地方. * 接口 vs. 类型别名 * 另一个重要区别是类型别名不能被extends和implements(自己也不能extends和imple ...

  4. 浩哥解析MyBatis源码(八)——Type类型模块之TypeAliasRegistry(类型别名注册器)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6705769.html 1.回顾 前面几篇讲了数据源模块,这和之前的事务模块都是enviro ...

  5. MyBatis源码解析(八)——Type类型模块之TypeAliasRegistry(类型别名注册器)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6705769.html 1.回顾 前面几篇讲了数据源模块,这和之前的事务模块都是enviro ...

  6. Swift类型转换 和 类型别名的定义(typealias)

    (一)类型转换 类型转化在 Swift 中是比较严格的,不同类型之间可以认为是不能相互转化的,只能重新产生一个对象和值,并拷贝一份. 1.0 整型数值之间的转换. // 不同类型是不能直接相加的,这时 ...

  7. Go语言|类型转换和类型别名

    类型转换 同类型之间的转换 Go语言中只有强制类型转换,没有隐式类型转换.该语法只能在两个类型之间支持相互转换的时候使用. import "fmt" func main() { v ...

  8. 类型定义VS类型别名

    类型定义是在当前包中的一直存在的.输出%T,发现类型前面都有main.前缀 类型别名,其实还是它的根本类型,别名只存在在代码中.编译后就不存在了,还是根本类型.

  9. 【Go入门教程2】基本构成元素:标识符(identifier)、关键字(keyword 25个)、字面量(literal)、分隔符(delimiter)、和 操作符(operator)

    基本构成要素 Go 的语言符号 又称 词法元素,共包括 5 类内容——标识符(identifier).关键字(keyword).字面量(literal).分隔符(delimiter) 和 操作符(op ...

随机推荐

  1. unity探索者之UGUI圆形图片组件

    版权声明:本文为原创文章,转载请声明https://www.cnblogs.com/unityExplorer/p/13524824.html 使用UGUI进行游戏开发的过程中经常会遇到一个问题:玩家 ...

  2. Js中的各种高度问题

    一.屏幕宽高相关 屏幕高度就是你的整个屏幕高度(开机会亮的那片区域的高度),相关的其他高度划分很简单,就是以任务栏为分界线从而分为两部分. screen.height :屏幕高度. screen.wi ...

  3. 用mysqldump备份数据库

    格式:/usr/local/mysql/bin/mysqldump -hip -Pport -uuser -ppasswd --set-gtid-purged=off  --database aa & ...

  4. linux驱动之模块化编程

    今天刚开始学习linux驱动的编写.在网上开了许多网友的博客,感觉比较好的摘抄下来,以便以后忘记可以随时查看.下面是摘抄文章的地址,非常感谢他们. http://blog.chinaunix.net/ ...

  5. 微信小程序发送订阅消息(之前是模板消息)

    之前的模板消息已经废弃,现在改为订阅消息,订阅消息发布前,需要用户确认后才能接收订阅消息. 小程序端 index.wxml <button bindtap="send"> ...

  6. 初识ABP vNext(6):vue+ABP实现国际化

    Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章. 目录 前言 开始 语言选项 语言切换 注意 最后 前言 上一篇介绍了ABP扩展实体,并且在前端部分新增了身份认证管理和租户管理的菜单,在 ...

  7. C#.WinForm 拖动文件到PictrueBox(支持跨UAC拖动)

    如程序以普通方式打开,那么DragDrop DragEnter 事件是可以正常使用的.但以管理员身份运行时,这两个方法将失效. 原因是 Windows机制(用户界面特权隔离). UIPI:用户界面特权 ...

  8. 轻松应对并发,Newbe.Claptrap 框架入门,第四步 —— 利用 Minion,商品下单

    接上一篇 Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存 ,我们继续要了解一下如何使用 Newbe.Claptrap 框架开发业务.通过本篇阅读,您便可以开 ...

  9. 技术揭秘:华为云DLI背后的核心计算引擎

    摘要:介绍隐藏在华为云数据湖探索服务背后的核心计算引擎Spark,玩转DLI,,轻松完成大数据的分析处理. 本文主要给大家介绍隐藏在华为云数据湖探索服务(后文简称DLI)背后的核心计算引擎——Spar ...

  10. 小案例-WebSocket实现简易聊天室

    前言 在详解 HTTP系列之一讲到HTTP/2.0 突破了传统的"请求-问答模式"这一局限,实现了服务器主动向客户端传送数据.而本章将通过一种在单个TCP连接上进行全双工通信的协议 ...