TS的基本数据类型如下:
number | any |
string | void |
boolean | never |
Symbol | 元组 |
null | 枚举enum |
undefined | |
Array | |
object | |
Function |
目录
1. number,string,boolean,any
//number
let num:number=1 //定义num必须为number
let error:number='a' //报错:不能将类型“string”分配给类型“number”
//string
let str:string='我是string' //str必须为string
let error:string=true //报错:不能将类型“boolean”分配给类型“string”
//boolean
let buer:boolean=true //buer必须为boolean
let error:boolean='我是boolean类型' //报错:不能将类型“string”分配给类型“boolean”
//any
//将数据定义为any,即表示该数据可以是任意类型
//但不建议用它,都用any了,ts就没啥用了
2.Symbol
let sbl:Symbol=Symbol() //可以显示声明
let sb12=Symbol() //直接创建
3. null,undefined
//给变量规定的啥类型,就是啥类型,别瞎改
let n:null=null //正确的
let n2:null=1 //报错:不能将类型“1”分配给类型“null”
let num:number=null //报错:不能将类型“null”分配给类型“number”
let u:undefined=undefined //正确的
let u1:undefined='a' //报错:不能将类型“"a"”分配给类型“undefined”
let str:string=undefined //报错:不能将类型“undefined”分配给类型“string”
4. Array
(1) 类型[ ]
let nrr:number[]=[1,2,3] //nrr中的数据必须为number
let srr:string[]=['a','b','c'] //srr中的数据必须为string
let brr:boolean[]=[1,'a'] //报错:数组元素的类型与定义的不符
(2) 数组泛型
// Array<类型>
let arr:Array<number>=[1,2,3]
let brr:Array<string>=['a','b']
5.Object
let obj:object={a:'A',b:'B'} //正确的
//改变obj中的属性值
obj.a='C' //标红:类型“object”上不存在属性“a”
//标红是由于,未规定obj中的a和b的类型
//故:
let obj2:{a:string,b:string}={a:'A',b:'B'}
obj2.a='C' //不标红了
6. Function
(1) 函数声明
//1. 函数声明
// function fn(形参1:类型,形参2:类型):返回值的类型{ return xx }
function fn(x:number,y:number):number{
return x+y //若return的不是number,也报错
}
console.log(fn(1,2)) //3
console.log(fn(1)) //报错:应有 2 个参数,但获得 1 个
console.log(fn(1,2,3)) //报错:应有 2 个参数,但获得 3 个
(2) 函数表达式
//2.函数表达式
//第一种
let fn=function(x:number,y:number):number{
return x+y
}
//第二种:非常严谨,对于fn1的形参类型和返回值类型也做了规定
let fn1:(x:number,y:number)=>number=function(x:number,y:number):number{
return x+y
}
//第二种中的=>,与es6中的=>不是一个东西;
//该=>用来表示函数类型的定义,左边是输入类型,右边是输出类型
(3) 函数参数问题
//形参后加? 表示该参数是可选的,爱写不写
//注:该可选参数必须放在最后一个写,即str2后不可以有其他必选形参
function fn(str1:string,str2?:string){
if(str2){
return str1+str2
}else{
return str1
}
}
console.log(fn('好')); //好
console.log(fn('好','耶')); //好耶
//形参直接给默认值
//注:给默认值的形参就不用管是不是写在最后了
function fn1(str1:string,str2:string='耗',str3:string){
return str1+str2+str3
}
console.log(fn1('烦','鼠','了')); //烦鼠了
console.log(fn1('烦',undefined,'了')); //烦耗了
//剩余参数
//注:剩余参数是数组
function fn2(...rest:number[]){
return rest
}
console.log(fn2(1,2));
(4)重载
重载决策是一种编译时机制,用于在给定了参数列表和一组候选函数成员的情况下,选择一个最佳函数成员来实施调用。
翻译人话就是:他可以给函数定义多种类型情况。请看代码:
//重载包括:重载签名+实现签名
//就是将所有可能排列组合似的写出来
function add(a: number, b: number): number;
function add(a: string, b: string): string;
function add(a: string, b: number): string;
function add(a: number, b: string): string; //以上部分是:重载签名
function add(a: string | number, b: string | number) { //实现签名
if (typeof a === 'string' || typeof b === 'string') {
return a.toString() + b.toString();
}
return a + b;
}
7. 元组
一种限制数组的元素类型和个数的数组
//定义为元组,则类型和数量都必须与之匹配
let arr:[string,number]=['a',2] //正确的
let brr:[string,number]=[2,'b'] //报错:不能将类型“string”分配给类型“number”
let crr:[string,number]=['c',3,5] //报错:源具有 3 个元素,但目标仅允许 2 个
//允许向元组中push元素,到push的新元素无法访问
arr.push(2)
console.log(arr); //['a', 2, 2]
console.log(arr[3]); //报错:长度为 "2" 的元组类型 "[string, number]" 在索引 "3" 处没有元素
8. 枚举enum
枚举类型用于定义数值集合
enum num {
one,
two,
three
};
let n:num=num.two
console.log(n); //1
9.void
用于标识方法返回值的类型,表示该方法
没有返回值。
function fn():void {
alert(11); //无返回值
}
10. never
never 是其它类型(包括 null 和 undefined)的子类型,代表从不会出现的值。