1-1、类型
boolean string number array tuple(元组) enum(枚举) null undefined object void never any
typescript类型说明的相关官方文档:
https://www.typescriptlang.org/docs/handbook/basic-types.html
1、高级类型
union 组合类型
Nullable 可空类型
Literal 预定义类型
2、tuple(元组)
(1)声明
let person:[number,string] = [1,'马龙']
(2)说明
是一个固定长度,固定类型的数组
(3)注意事项
①使用元组.push 可以突破元组界限,无限度添加长度
②声明一个元组的时候一定要指明类型,不指明类型就是一个普通数组
3、联合(Union)和字面量(Literal)类型
let union1 :string | number | boolean //只能用这几个类型
let union2 :0|1|2 //确定了范围
4、枚举(Enum)
//字符串比较
//常量枚举,提升性能
const enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHt",
}
const value = 'UP'
if(value === Direction.Up){
console.log(value)
}
1-2、类型适配(类型断言)
let msg :any
msg = "abc
let d1 = (<string>msg).endsWith("c")
let d2 = (msg as string).endsWith('d')
须对自己代码类型有绝对的信心才使用
1-3、函数类型 as
let log = function(msg){
consloe.log(msg);
}
let log2 = (msg:String) => consloe.log(msg)
//加上?代表这个参数可选;也可输入默认值,必须在最后
let log3 = (msg:String,code? :number) => {
console.log(msg,code)
}
------
function getLength(input :string | number):number{
const str = input as string
if(str.length){
return str.length
} else {
const number = input as number
return number.toString().length
}
}
//type guard
function getlength2(input :string | number):number{
if(typeof input === "string"){
return str.length
}else{
return input.toString().length
}
}
注意事项:
使用var声明变量,变量将在这个代码块中一直存在
1-4 Class
Class:定义了一切事物的抽象特点
Object:类的实例
OOP三大特性:封装、继承和多态
1-5 泛型
相当于一个占位符
1、创建一个拥有特定类型的容器
2、灵活约束参数类型
3、解决在函数使用时,函数类型推断不会流入函数体,使用表达式没法明确建立类型的绑定
function echo<T>(arg:T):T{
return arg
}
const res = echo('string')
//约束泛型
interface IWithLength{
length:number
}
function echoWithLength<T extends IWithLength>(arg:T):T{
console.log(arg.length)
return arg
}
const str = echoWithLength("123")
const arr = echoWithLength([1,2,3])
const obj = echoWithLength({length : 1})