**TS基本类型**

111 阅读3分钟

1.布尔类型

let bool:boolean = false;

2.数值类型

let num:number=123;

3.字符串类型

let str:string="Lison"

4.null和undefined (所有类型的子类型)

let u:undefined=undefined;

let n:null=null;

let num:number = undefined;

5.Any任意类型 (可以调用属性和方法--万金油) ----对比 unknown类型(相似) ----对比never(对立)

let notsure:any;

value=123;

value="string";

value=false;

let array:any[]=[1,"string",true]

6.never 永不存在的值得类型


7.数组类型

let list1:number[]=[1,2,3]

let liat2:Array=[4,5,6]

8.元祖类型(类型和个数一一对应)

let tuple:[string,number,boolean]=["asd",123,false];

9.枚举

enum Roles{

A=1,

B=2,

c=3

}

console.log(Roles.A) ---1


10.void 没有任意类型(函数没有返回值return的时候会用到)*

var consoleText =(text:string):void=>{

console.log(text);

};

//注意:(void 类型的变量只能赋值为 undefined 和 null,其他类型不能赋值给 void 类型的变量)

const errorFunc = (message: string): never => {

throw new Error(message);

};

11定义object类型 ---interface接口定义对象类型(鸭子类型)(不存在与js,ts中编译不会转换做js,只做类型静态检查)

interface Person{

//定义接口 声明接口interface

readonly id:number; // readonly定义只读属性,被创建时才可赋值

name:string;

age?:number; //?为可选属性,加了后,定义的变量中可以有age属性,也可以没有这个属性

}

let viking:Person ={

id:1,

name:'viking',

age:20

} //定义变量,并用PersonA约束这个变量

viking.id =9527 //出错,因为id之前被赋值,不可再次赋值

12.function函数

function add(x:number,y:number,z?:number):number{

//声明一个函数

if(typeof z === 'number'){

return x + y + z

}else{

return x + y

}

}

add(1,2);

const add=(x:number,y:number,z?:number):number=>{ //函数表达式(箭头函数)

if(typeof z === 'number'){

return x + y + z

}else{

return x + y

}

}

let add2:(x:number,y:number,z?:number)=>number =add

//第一个箭头是es6中箭头函数

//第二个就箭头是声明函数类型返回值的方法

interfince 描述函数类型

interface ISum {

(x:number,y:number,z?:number);number

}

let add2: ISum = add


//类型推论

let str = 'str'

str =21 //错误,是string 类型

//联合类型 (要求只要符合联合类型中任意一种类型即可) union types 可以访问共有类型属性和方法

const getLenghe =(content:number|string)=>{

if(typeof content ==="string"){

return content.length;

}else{

return content.toString().length;

}

console.log(getlenghe("asd"); ---3

//类型断言 用as

function getLength(input:string|number):number{

const str =input as string

if(str.lenght){

return str.length

}else {

const number = input as number

return number.toString().length

}

}


//泛型----约束泛型 (extends继承)

interface ength {

length:number

}

function echo(arg :T):T{

console.log(arg.length)

return arg

}

使用泛型函数(T:类型变量)

function myfn(args: T): T { return args; let output = myfn("Hello"); //明确传入类型参数 let output2 = myfn("Hello") //不传入类型参数,TS根据上下文自动推断类型}

使用泛型变量(这可以让我们把泛型变量T当做类型的一部分使用,而不是整个类型)

function myfn(args: T[]): T[] { console.log(args.length) return args; } function myfn2(args: Array): Array { console.log(args.length); return args; }

 创建泛型接口

interface Test { (args: T): T } function myfn(args: T): T { return args; } let myTest: Test = myfn;

泛型类(这里没有限定T的类型,可以传入任意类型)

class add{ value: T; add: (x: T, y: T) => T; } let myTest = new add(); myTest.value = 0; myTest.add = function (x, y) { return x + y }

泛型约束(类型变量继承接口)

interface Test{ length:number; } function myfn(args:T):T{ console.log(args.length) return args; } myfn(3); //error myfn("abc") //3