ts代码有类型校验,必须指定类型
一:JavaScript的基本类型
7种:(大小写敏感)
boolean: true 和false
null
undefined:变量未定义时的属性
number
string
symbol:(es6新添加的),它的实例是唯一且不可改变的
二:TypeScript的基本类型
1:数据类型
数据类型 | 关键字 | 描述 |
---|---|---|
任意类型 | any |
声明为 any 的变量可以赋予任意类型的值。 举例: var oBox:any = document.getElementById('box');
|
数据类型 | number |
双精度 64 位浮点值。它可以用来表示整数和分数。 let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制
let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
|
字符串类型 | string |
一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式。 let name: string = "Runoob";
let years: number = 5;
let words: string = `您好,今年是 ${ name } 发布 ${ years + 1} 周年`;
|
布尔类型 | boolean |
表示逻辑值:true 和 false。 let flag: boolean = true;
|
数组类型 | 无 |
声明变量为数组。 // 在元素类型后面加上[]
let arr: number[] = [1, 2];
// 或者使用数组泛型
let arr: Array<number> = [1, 2];
// 在元素类型后面加上[]
let arr: any[] = [1, 'gg'];
|
元组 | 无 |
元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同。 let x: [string, number];
x = ['Runoob', 1]; // 运行正常
x = [1, 'Runoob']; // 报错
console.log(x[0]); // 输出 Runoob
|
枚举 | enum |
枚举类型用于定义数值集合。(定义更多的其他非数值类型的数据) 定义: enum 枚举名称{ 标识符[=整型常数], ..... } 举例: enum flag {success=1,error=0}; enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c); // 输出 2,如果枚举类型没有赋值,那么输出的就是下标
|
void | void |
用于标识方法返回值的类型,表示该方法没有返回值。 function hello(): void {
alert("Hello Runoob");
}
|
null | null |
表示对象值缺失。 |
undefined | undefined |
用于初始化变量为一个未定义的值; 举例: 下面这样定义最好。 let x: number | null | undefined;
x = 1; // 运行正确
x = undefined; // 运行正确
x = null; // 运行正确
|
never | never |
never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明为 never 类型的变量只能被 never 类型所赋值,在函数中它通常表现为抛出异常或无法执行到终止点(例如无线循环) 举例: let x: never;
// 运行错误,数字类型不能转为 never 类型
x = 123;
|
Object |
Object是一种非 举例: declare function create(o: object | null): void; |
2:类型断言(相当于转换数据类型)
类型断言有两种形式。 其一是“尖括号”语法:
var str = '1' var str2:number = <number> <any> str //str、str2 是 string 类型 console.log(str2)
另一个为as
语法:
let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;
两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;然而,当你在TypeScript里使用JSX时,只有 as
语法断言是被允许的。
三:变量声明
TypeScript 变量的命名规则:
-
变量名称可以包含数字和字母。
-
除了下划线 _ 和美元 $ 符号外,不能包含其他特殊字符,包括空格。
-
变量名不能以数字开头。
变量使用前必须先声明,我们可以使用 var 来声明变量。
1:var
声明变量的类型及初始值: var [变量名] : [类型] = 值; 例如: var uname:string = "Runoob"; 声明变量的类型及但没有初始值,变量值会设置为 undefined: var [变量名] : [类型]; 例如: var uname:string; 声明变量并初始值,但不设置类型类型,该变量可以是任意类型: var [变量名] = 值; 例如: var uname = "Runoob"; 声明变量没有设置类型和初始值,类型可以是任意类型,默认初始值为 undefined: var [变量名]; 例如: var uname;
// var 的变量提升的问题 console.log(a); //undefined ##如何看是否是提升变量---》局部作用域前后打印看看 { var a = 10; } console.log(a) //10
2:let (es6新增)
let不存在变量提升,作用域是局部作用域
3:const
声明(es6新增)
const
声明是声明变量的另一种方式。
它们与let
声明相似,但是就像它的名字所表达的,它们被赋值后不能再改变。 换句话说,它们拥有与 let
相同的作用域规则,但是不能对它们重新赋值。
这很好理解,它们引用的值是不可变的。
const numLivesForCat = 9; const kitty = { name: "Aurora", numLives: numLivesForCat, } // Error kitty = { name: "Danielle", numLives: numLivesForCat }; // all "okay" kitty.name = "Rory"; kitty.name = "Kitty"; kitty.name = "Cat"; kitty.numLives--;
除非你使用特殊的方法去避免,实际上const
变量的内部状态是可修改的。 幸运的是,TypeScript允许你将对象的成员设置成只读的。
四:泛型
1:泛型函数---泛型的作用
当我们需要给一个函数传入一个数字时(需要参数和返回值是同一类型),
function hello(arg: number): number { return arg; }
当我们需要给一个函数传入一个字符串时,
function hello(arg: string): string { return arg; }
这样是不是很麻烦呢?看下面写法:
function hello(arg: any): any { return arg; }
这样写的缺点:any类型不能明确地表达参数与返回值必须是相同类型。因此泛型是能明确控制参数、返回值数据类型相同的方式
泛型如下写法:
function hello<T>(arg: T): T { return arg; }
2:泛型变量
为什么上面的变量会报错呢?因为 T 只是捕捉传入的数据类型,并不能确定数据是number 还是 string还是什么。
像泛型数组就没有问题了
五:枚举
为什么会有枚举呢?举个例子:后端开发约定订单的开始是0,未结账是1,运输中是2,运输完成是3,已收货是4.这样的纯数字会使得代码缺乏可读性。枚举就用于此场景。
1:数字枚举
enum OrderStatus { Start = 1, Unpaid, Shipping, Shipped, Complete, }
就像上面我们就可以直接通过 OrderStatus.Start来代替原来的数字1,这样使得代码具备了可读性。
(上面Start = 1时,后面的枚举变量就是递增的)
enum OrderStatus { Start, Unpaid, Shipping, Shipped, Complete, }
(上面Start就是0,后面的枚举变量就是递增的。我们虽然不在意后面的这些值,但这些值必须是确定的。)
2:字符串枚举
enum OrderStatus { Start = 'Start', Unpaid = 'Unpaid', Shipping = 'Shipping', Shipped= 'Shipped', Complete = 'Complete', }
这样的可读性是不是更高了呢。
六:symbol
自es6起,symbol 是类似于number、string的基本类型。
symbol的特点:symbol是唯一的,即使是使用同样的方式生成的两个symbol
七:iterator 和 generator