一. typscript的数据类型
1.布尔类型 数据只有true false两个值
let str:boolean = true
console.log(str)//输出true
2.数字类型 number,数据只能为数字(包含整数和小数)
let str:number = 123
console.log(str)//输出 123
3.字符串类型string 数据只能接收字符串类型
let str:string='123'
console.log(str)//输出'123'
4.数组类型
ts中定义数组有两种方式([]和<>),普通js数组中数据可以为任意类型,ts中规定了类型就只能是定义的类型,否则报错
<1>方式一
let arr:string[]=["a","b","c","d"]
console.log(arr) //输出["a","b","c","d"]
<2>方式二
let arr:Array=["a","b","c","d"]
console.log(arr) //输出["a","b","c","d"]
5.元组类型(tuple) 属于数组的一种,数组类型中数据只能是一种,元组中可以定义多种,但注意点是数据要和定义的类型一一对应
let arr:[string,number,boolean] = ["ts", 123, true]
console.log(arr) //输出["ts", 123, true]
6.枚举类型(enum) 主要是用来定义标识符的
enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],
...
标识符[=整型常数]
}
例:(1) enum Color{ red, blue, green}
let c:Color = enum.blue
console.log(c) //输出1
(2) enum Color{ red, blue = 5, green}
let c:Color = enum.green
console.log(c) //输出6
注意点:标识符未赋值时,默认输入下标,赋值后,则是值+1
7. any类型 就是可以是任意类型
let str:any = '123'
str = 123
str = true
此时打印str不会报错
any类型主要用于3中情况下:
(1)变量的值会动态的改变下,比如用户输入的值
let x: any = 1; // 数字类型
x = 'I am who I am'; // 字符串类型
x = false; // 布尔类型
(2)改写现有代码,允许在编译时刻选择性的包含或一处类型检查
let x: any = 4;
x.ifItExists(); // 正确,ifItExists方法在运行时可能存在,但这里并不会检查
x.toFixed(); // 正确
(3)存储各种类型数据的数组时
let arrayList: any[] = [1, false, 'fine'];
arrayList[1] = 100;
8. undefined 是其他(never类型)数据类型的子类型
例: let str:number;
console.log(str)//输出 undefined 但报错
let str:undefined ;
console.log(str)//输出 undefined 不报错,正确写法
//定义了没赋值,默认值就是undefined
let str:number | undefined
console.log(str)
9. null 是其他(never类型)数据类型的子类型,null是一个只有一个值的特殊类型。表示一个空对象引用
var num:null
num = 123 //报错
num = null //正确
一个元素可能是number类型,也有可能是undefined类型,也有可能是null类型,可以设置多个类型
let str:number | nudefined | null
num = 123
console.log(num)//输出123
10. void 类型 标书没有任何类型,一般用于定义方法的时候方法没有返回值,若有返回值则定义对应的类型
例:
function run():void{
console.log('run')
}
run()//输出run
unction run():number{
return 123
}
run()//输出123
11. never类型 是其他类型(包括null和undefined类型)的子类型,代表从不会出现的值,这意味着声明never的变量只能被never类型所赋值
例: var a:undefined;
a = undefined
var b:null;
b = null
var a:never
a = 123//错误写法
a=(()=>{
throw new Error('错误’)
})()
never很少使用,可以用any代替,了解一下即可
12.Object类型
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
使用object类型,就可以更好的表示像Object.create这样的API。例如:
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error
类型断言
类型断言可以手动指定一个值的类型, 即可以从一个类型变成另一个类型,有两种形式:
<类型>值 值 as <类型>
类型推断
当类型没有给出时,TypeScript 编译器利用类型推断来推断类型。
如果由于缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型。
变量作用域
变量作用域指定了变量定义的位置。
程序中变量的可用性由变量作用域决定。
TypeScript 有以下几种作用域:
-
全局作用域 − 全局变量定义在程序结构的外部,它可以在你代码的任何位置使用。
-
类作用域 − 这个变量也可以称为 字段。类变量声明在一个类里头,但在类的方法外面。 该变量可以通过类的对象来访问。类变量也可以是静态的,静态的变量可以通过类名直接访问。
-
局部作用域 − 局部变量,局部变量只能在声明它的一个代码块(如:方法)中使用。