|
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是一种非number,string,boolean,symbol,null,或undefined的类型
举例:
declare function create(o: object | null): void; create({ prop: 0 }); r
|
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
或许你没有发现,你认真学习的样子总是最美的
来源:https://www.cnblogs.com/lilz/p/10808139.html |