ts中的数据基本类型

ts数据类型

ts数据基本数据类型

声明了类型之后,变量的类型不能改变

一根竖线| :表示或者,用来连接多个类型(联合类型)

问号?代表可选

&表示且

布尔值类型boolean
let bool:boolean=true
数字类型number
let num:number=10
字符串类型string
let str:string="年少不知富婆好,错把美貌当成宝"
undefined类型
const und:undefined=undefined
null类型
const nul:null=null

null和undefined是其他类型的子类型,可以赋值给任意类型

数组类型Array
let arr:number[]=[1,2,3]

let arr:Array<number>=[10,20,30]

let arr:Array<nunber|string>=["hello",100,200]

数组定义后,里面的数据类型和定义数组的时候必须是一致的,否则会报错

元组类型tuple
let yuanZu:[string,number,boolean,undefined]=['haha',10,true,undefined]

元组是ts新增的数据类型,可以理解为固定长度,每个位置数据类型固定的数组

枚举类型enum
  enum Color {
    red,
    blue,
    yellow,
  }

  let color = Color.red;
  console.log(color); //0
  console.log(Color[2]); // yellow
  
  enum Sex {
    男 = 1,
    女,
  }
  console.log(Sex.男); //1
  console.log(Sex[2]); //女

枚举中的每个元素都有一个编号,默认从0开始,后面递增1;但是我们也可以自己定义,eg从1开始

枚举可以通过元素获取编号,也可以通过编号获取对应元素

元素可以直接是中文,但是我们不建议这么写

any类型
  let anyType: any = 100;
  anyType = "窗前明月光,起来区开窗;被赏一耳光,牙齿全掉光";
  console.log(anyType);
  let a: any[] = [false, 666, "hello"];

可以是任意类型,好用,但是编译的时候没有报错提示;相当于直接使用js语法

unknown类型

和any相似,都可以给任何类型的值赋值给变量;

但是如果将这个变量复制给一个已知类型的变量,unknow会报错,而any不会

  let unknowType: unknown;
  unknowType = 10;
  unknowType = "str";
  console.log(unknowType);
  let c = unknowType;
  let d = 12;
  d = unknowType;  // 这一行会报错,因为d已经推断出来是数字,不能将unknown赋值给数字类型的,而如果是    any的话就不会报错,undefined,null,any都可以赋值给任意类型
void类型
  function doSomething(): void {
    const str: string = "只要富婆把握住,连夜搬进大别墅";
  }
  doSomething();
  
  // 给void赋值,意义不大
  //   let vo: void = null/undefined;

在函数声明的时候,小括号后面使用void,代表该函数没有返回值 (也等价于函数返回undefined或null)

对象类型object
 interface Person {
    age;
    name;
    height;
  }

  function getFitResult(obj: Person): object | boolean {
    const singleMale = {
      name: "Luca",
      age: 24,
      height: 180,
    };

    if (singleMale.age - obj.age <= 5 && singleMale.height - obj.height < 15) {
      return singleMale;
    } else {
      return false;
    }
  }

  const re = getFitResult({ name: "Ari", age: 24, height: 168 });
  console.log(re);

let a:{name:“孙悟空”}

let a={name:“孙悟空”,age?:number}

let a={name:“luca”,[propName:string]:any} ,必须有name,还可以有其他任意类型属性

联合类型union
let a:number|string=20
a="hello"

表示可以是多种类型中的一种

表格形式

类型实例描述
number0,12,-20任意数字
string“hello”任意字符串
booleantrue/false布尔值true/false
字面量其本身限制变量的值就是改字面量的值;有点类似与const,声明了就不能改
any*任意类型,设置为any,相当于对该变量关闭了TS,与js差不多
unknown*类型安全的any
void空值(undefined)没有值(或undefined);多用于函数没有返回值
never没有值不能是任何值,可用于函数报错
object{name:“luca”}任意对象;{}用来指定对象中包含哪些属性,属性后加上问好,表示可选
array[1,“fun”,true]任意数组
tuple[4,5]元组,TS新增类型,固定长度的数组
enumenum{A,B}枚举,TS新增类型
undefinedundefined任意类型的子类型
nullnull任意类型的子类型

其他相关概念

类型断言

告诉编译器,我知道是什么类型,知道自己在干什么

语法:

变量 as 类型
<类型>变量
  function getLength(str: string | number) {
  由于接收的参数可能是数组,数字没有length,直接用会报错,所以使用类型断言来解决
    if ((<string>str).length) {
      // 如果存在长度,那么是字符串
      return (str as string).length;
    } else {
      return str.toString().length;
    }
  }

类型推断

如果没有指定变量类型,他会根据赋值情况,推断出一个类型

如果声明的同时赋值,那么TS可以自动对变量类型进行检测;所以声明并赋值,可以省略类型的声明

只声明,不复制,解析器会把他设置为any(隐式any)

let a=100  推断为number
let b   //推断为any
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值