TypeScript入门02
来源:互联网 发布:手机桌面视频软件 编辑:程序博客网 时间:2024/06/06 01:43
在 TypeScript
中,提供了以下基本数据类型:
- 布尔类型(
boolean
) - 数字类型(
number
) - 字符串类型(
string
) - 数组类型(
array
) - 元祖类型(
tuple
) - 枚举类型(
enum
) - 任意值类型(
any
) null
和undefined
void
类型never
类型
其中元祖、枚举、任意值、void
类型和never
类型是TypeScript
有别于 JavaScript
的特有类型。
在TypeScript
中声明变量,需要加上类型声明,如boolean
或string
等。通过静态类型约束,在编译时执行类型检查,这样可以避免一些类型混用的低级错误
1.布尔类型
布尔类型是最简单的数据类型,只有true
和false
两种值。
下面定义了一个布尔类型的变量flag
,并赋值为true
。由于flag
被初始化为布尔类型,如果再赋值为非boolean
的其他类型值,编译时会抛出错误。
let flag : boolean = true;flag = 1; //报错,不能把数字类型的值赋给布尔类型的变量。
2.数字类型
在TypeScript
中,数字都是浮点型。 TypeScript
同时支持二进制、八进制、十进制和十六进制字面量,示例代码如下:
let binaryLiteral : number = 0b1010; // 二进制let octalLiteral : number = 0o744; // 八进制let decLiteral : number = 6; // 十进制let hexLiteral : number = 0xf00d // 十六进制
3.字符串类型
TypeScript
支持使用单引号(‘)或双引号(“)来表示字符串类型。除此之外,还支持使用模版字符串反引号( ` )来定义多行文本和内嵌表达式。使用 ${expr}
的形式嵌入变量或表达式,在处理拼接字符串的时候很有用,示例代码如下:
let name : string = "Angular";let years : number = 5;let words : string = `你好,今年是 ${ name } 发布 ${ years + 1 } 周年`;
4.数组类型
TypeScript
数组的操作类似于JavaScript
中数组的操作,TypeScript
建议开发者最好只为数组元素赋一种类型的值。 TypeScript
有两种数组定义方式,示例代码如下:
// 在元素类型后面接上 []let arr : number[] = [1,2];// 或者使用数字泛型let arr : Array<number> = [1,2];
5.元祖类型
元祖类型用来表示已知元素数量和类型的数组,各元素的类型不必相同。
下面定义了一对值分别为字符串和数字类型的元祖,示例代码如下:
let x : [string,number];x = ['Angular',25]; // 运行正常x = [10,'Angular']; // 报错console.log(x[0]); // 输出 Angular
6.枚举类型
枚举是一个可被命名的整形常数的集合,枚举类型为集合成员赋予有意义的名称,增强可读性。
示例代码如下:
enum Color {Red,Green,Blue};let c : Color = Color.Blue;console.log(c); // 输出: 2
枚举默认下标为 0 ,可以手动修改默认下标值,示例代码如下:
enum Color {Red = 2,Green,Blue = 6};let c : Color = Color.Green;console.log(c); // 输出: 3
7.任意值类型
任意值是TypeScript
针对编程时类型不明确的变量使用的一种数据类型,它常用于以下三种情况。
- 变量的值会动态变化,比如来自用户的输入或者第三方代码库,任意值类型可以让这些变量跳过编译阶段的类型检查,示例代码如下:
let x : any = 1; //数字类型x = "I am a string"; // 字符串类型x = false; // 布尔类型
- 改写现有代码时,任意值允许在编译时可选择地包含或者移除类型检查,示例代码如下:
let x : any = 4;x.ifItExists(); //正确,ifItExists方法在运行时可能存在,但是这里并不检查x.toFixed(); //正确
- 定义存储各种类型数据的数组时,示例代码如下:
let arrayList : any[] = [1,false,"fine"];arrayList[1] = 100;
8.null
和undefined
默认情况下,null
和undefined
是其他类型的子类型,可以赋值给其他类型,如数字类型等,此时赋值后的类型会变成null
或undefined
,致力于类型校验的TypeScript
设计者们显然不希望这种类型变化给开发者带来额外的困扰。在TypeScript
中启用严格的空校验(–strictNullChecks)特性,就可以使得null
和undefined
只能被赋值给void
或本身对应的类型,示例代码如下:
// 启用--strictNullCheckslet x : number;x = 1; //运行正确x = undefined; //运行错误x = null; //运行错误
上面例子中变量x
只能是数字类型,如果一个类型可能出现null
或者undefined
,可以用|
来支持多种类型,示例代码如下:
// 启用--strictNullCheckslet x : number;let y : number | undefined;let z : number | undefined | null;x = 1; //运行正确y = 1; //运行正确z = 1; //运行正确x = undefined; //运行错误y = undefined; //运行正确z = undefined; //运行正确x = null; //运行错误y = null; //运行错误z = null; //运行正确x = y; //运行错误x = z; //运行错误y = x; //运行正确y = z; //运行错误z = x; //运行正确z = y; //运行正确
上面的例子中变量y
允许被赋予数字类型或者undefined
类型的数据值,而变量z
还额外支持null
。TypeScript
官方建议在编码时,都启用--strictNullChecks
特性,这样有利于编写更健壮的代码。
9.void
类型
在TypeScript
中,使用void
表示没有任何类型。例如一个函数没有返回值时,意味着返回值类型是void
。
示例代码如下:
function hello() : void { alert("Hello Angular");}
对于可忽略返回值的回调函数来说,使用void类型会比任意值类型更安全一些。
示例代码如下:
function func(foo:()=>void) { let f = foo(); //使用函数foo的返回值 f.doSth(); //报错,void类型不存在doSth()方法,此时换成任意值类型则不报错}
10.never
类型
never
是其他类型(包括null
和undefined
)的子类型,代表从不会出现的值。这意味着声明为never
类型的变量只能被never
类型所赋值,在函数中它通常表现为抛出异常或者无法执行到终止点(例如无限循环)。
示例代码如下:
let x : never;let y : number;// 运行错误,数字类型不能转为never类型x = 123;// 运行正确,never类型可以赋值给never类型x = (()=>{throw new Error('exception occur')})();// 运行正确,never类型可以赋值给number类型y = (()=>{throw new Error('exception occur')})();// 返回值为never的函数可以是抛出异常的情况function error(message : string) : never { throw new Error(message);}// 返回值为never的函数可以是无法被执行到终止点的情况function loop():never { while(true) { }}
- TypeScript入门02
- typescript入门,typescript特性
- typeScript入门
- TypeScript入门
- TypeScript入门
- TypeScript 入门指南
- TypeScript入门-语法篇
- TypeScript 入门11
- typescript 快速入门
- TypeScript入门-泛型
- Typescript快速入门
- TypeScript入门01
- TypeScript快速入门
- 一:TypeScript入门
- 一:TypeScript入门
- typescript 入门笔记
- TypeScript快速入门&Hello world
- TypeScript入门-3.参数类型
- mysql分表和表分区详解
- HTML5 CSS3 诱人的实例 :模仿优酷视频截图功能
- fig13_03.cpp
- PE文件格式详解(手工实现一个可执行文件)
- xilinx SDK 更改堆栈大小的方法与位置
- TypeScript入门02
- 机器学习实战决策树plotTree函数完全解析
- storm java.lang.RuntimeException: java.io.NotSerializableException: 异常
- JAVA基础
- Jenkins+Gradle 实现android端app自动构建
- fastjson数据格式转换(一) SerializerFeature属性详解
- 第七章 食物数据库例子
- PMP考试【8】--合同类型
- 推送通知策略分析