一、基本数据类型

  • number类型:双精度64位浮点值。它可以用来表示整数和分数。
  • boolean类型:表示逻辑值:true和false
  • string类型:一个字符系列,使用单引号(')或双引号(")来表示字符串类型。反引号(`)来定义多行文本和内嵌表达式
// 数值类型
let num: number;
num = 100
console.log(num);

// 布尔类型
let flag: boolean;
flag = true;
flag = false;

// 字符串
let beauty;
let msg = "成果";
let dream = `女神是${msg}`;
console.log(dream);

二、数组基本使用的四种方式

export default{}
//数组的基本使用
//方式一
let beautyArr:string[];
beautyArr=["刘亦菲","刘诗诗"];
// beautyArr=["刘亦菲","刘诗诗",100];
console.log(beautyArr);

//方式二
let numArr:Array<number>;
numArr=[1,2,3,4]
console.log(numArr);

//方式三:联合类型
let myBeauty:(number|string|boolean)[];
myBeauty = ["刘亦菲","刘诗诗",18]
myBeauty = ["刘亦菲","刘诗诗",18,true]
console.log(myBeauty);

//方法四:任意类型any
let arbitraily:any[]
arbitraily=[100,"关",true]
console.log(arbitraily);

三、元组

  • 元祖类型Tuple
  • TS中的元祖类型其实就是数组类型的扩展
  • 元组类型用来表示已知元素数量和类型的数组,各元素的类型不必相同,对应位置的类型需要相同
export default{}
//元组类型
let tup1:[string,boolean,number]
tup1=["关晓彤",true,18]
console.log(tup1);

四、定义数据

三种场景:

1、自定义

2、改写现有代码时,任意值允许在编译时可选择地包含或移出类型检查

3、定义存储各种类型数据的数组时let arr : any[]-[“刘亦菲",18,true];console.log( arr[0]);

export default{}

// 使用场景一
let temp:any;
temp="刘亦菲";temp=18;
temp=true;

// 使用场景二
let x: any=4;
//x.IfitExists();
console.log(x.toFixed())

// 使用场景三
// void类型
//某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。//当一个函数没有返回值时,你通常会见到其返回值类型是void
//在Ts中只有null和lundefined可以赋值给void类型
function test():void{
console.log("往后余生,风雪是你,平淡是你,敲每一行代码想的都是你。");
console.log("你是css,我是DIV,就算我的布局再好,没了你也就没了色彩。");
}
test();

let test1:void;
// test1="刘亦菲";
// test1=18;
// test1=true;
//严格模式下会null报错
test1=null;
test1=undefined;

五、null和undefined

  • TypeScript里,undefined和null两者各自有自己的类型分别叫做undefined和null和void相似,它们的本身的类型用处不是很大
  • 非严格模式下,可以把 null和undefined赋值给number类型的变量。I
let x:undefined=undefined;

 let y:null=null;
 // x="刘亦菲";
 // x=18;
 // y="刘亦菲";
 // y=19;

let money : number=100;

money=null;
 money=undefined;

六、never与Object

Never类型

  • never类型表示的是那些永不存在的值的类型
  • never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型变量也可能是
  • never类型,当它们被永不为真的类型保护所约束时。
//返回never的函数必须存在无法达到的终点
function error(message : string): never{
throw new Error (message);
}

error("挂掉了~~~")

//推断的返回值类型为never
function fail(){
    return error( "GG了~~")
}
//返回never的函数必须存在无法达到的终点
function loop():never {
        while(true)
        {
        //...
        }
    }

Object类型

  • 表示一个对象
  • 定义了一个只能保存对象的变量
let goddess:object;

goddess={name: "刘亦菲",age: 18};

console. log(goddess);

七、枚举

enum类型是对JavaScript标准数据类型的一个补充。像C#等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。

export default {}
enum Gender {
    Male,
    Female
}
let gender: Gender;
gender = Gender.Female;
gender = Gender.Male;
// gender = "666"//报错
// gender = true//报错
gender = 10
console.log(gender);

注意:TS中的枚举类型的取值,默认是从上至下从o开始递增的·虽然默认是从0开始递增的,但是我们也可以手动的指定枚举的取值的值

enum Gender {
    male,//男
    female//女
}
console.log(Gender.male);
console.log(Gender.female);

注意点:如果手动指定了前面枚举值的取值,那么后面枚举值的取值会根据前面的值来递增

enum Gender {
    male,//男
    female=5//女
}
console.log(Gender.male);//0
console.log(Gender.female);//5

字符串枚举

  1. 如果采用字面量对第一个成员进行赋值,下面的成员也必须赋值.
  2. 采用[index]的形式不能获取到内容,需要传入[key]
  3. 字符串枚举不能使用常量或者计算结果给枚举值赋值
  4. 它可以使用内部的其它枚举值来赋值
enum Direction{
    up="UP",
    down="DOWN"
}
console.log(Direction.up);//UP
console.log(Direction.down);//DOWN
console.log(Direction[0]);//undefined
console.log(Direction["up"]);//UP

let x:Direction;
x=Direction.down;
x="左"; //不可以

const getDirection=()=>"右"
x=getDirection();  //不可以

异构枚举

枚举中既包含数字又包含字符串,我们就称之为异构枚举

注意:"如果是字符串枚举,那么无法通过原始值获取到枚举值

enum Gender {
    male = 1,
    female = "女"
}

console.log(Gender.male);
console.log(Gender.female);
console.log(Gender[1]);
console.log(Gender['女']);

八、bigint与symbol

bigint类型:表示非常大的数

symbo1类型:表示全局唯一引用

 ES2020可用

BigInt类型

let hunder1: bigint = BigInt(100);
let hunder2: bigint = 100n;
console.log(hunder1);
console.log(hunder2);

Symbol类型

let firstName = Symbol("name");
let secondName = Symbol("name");

console.log(firstName);
console.log(secondName);

if (firstName === secondName) {
    console.log("ok");
} else {
    console.log("not ok");
}

九、变量的声明与解构

数组解构

//方式一
let goddess=["王祖贤","关之琳"];
let [firstName,secondName]=goddess;
console.log(firstName);
console.log(secondName);

//方式二
let goddess=["王祖贤","关之琳","张曼玉","利智"];
let[third,...rest]=goddess;
console.log(third);
console.log(rest);

//方式三
let goddess=["王祖贤","关之琳","张曼玉","利智"];
let [,forth,,fifth]=goddess;
console.log(forth);
console.log(fifth);

对象解构

let beauty={
    uname : "杨超越",
    age: 20,
    sex: "女",
}
let {uname,age,sex} = beauty;
console.log(uname);
console.log(age);
console.log(sex);

十、类型断言

类型断言可以用来手动指定一个值的类型,即允许变量从一种类型更改为另一种类型。通俗的说就是我相信我自己在定义什么类型

语法格式:

<类型>值

值as类型

export default{}

// let str:any ="世界上最遥远的距离就是,你是if而我是else,似乎一直相伴但又永远相离";
// //方式一
// let len=(<string>str).length 
// //方式二
// let num=(str as string).length

// console.log(len);
// console.log(num);

function typeAs(x:number|string){
    let len=(<string>x).length 
    //let len=(x as string)
    console.log(len)
    
}
typeAs("世界上最遥远的距离就是,你是if而我是else,似乎一直相伴但又永远相离")

十一、type别名

export default{}

// type beautys="斗战胜佛"|"齐天大圣"|"弼马温"|"孙行者"

// let one:beautys;
// // one=1;
// // one=true;
// // one="大师兄"
// one="斗战胜佛"

//第二种 定义别名
type myfun = (a:number,b:number) =>number;
//声明具体函数
let fun:myfun = (a:number,b:number) =>a + b;
let result=fun(10,20);
console.log(result);


type myGoddass={
    name: string,age: number,sex:boolean
}
let yifi:myGoddass={
    name: "刘亦菲",
    age:18,
    //sex:"男"//报错,不符合定义的类型
    sex:true