typescript数据类型

1、介绍

TypeScript 支持与 Javascript 几乎相同的数据类型,此外还提供了自己特有的一些类型。

类型声明

类型声明是TS非常重要的一个特点,通过类型声明可以指定TS中变量(参数、形参)的类型,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错,类型声明给变量设置了类型,使变量只能存储某种类型的值。

const app:类型
function fn(p1:类型,p2:类型):类型{}

自动类型(类型推论)

当对变量的声明和赋值时同时进行的,TS编译器会自动判断变量的类型,工作中建议还是手动指明变量类型,尽量少的去让TS自动判断类型。

//自动类型
/* var hello = "hello";
console.log(hello); */

//TS可以实现强类型
//声明
var hello : string ;
//赋值
hello = "zhangsan";
console.log(hello);

2、布尔值

let isDone: boolean = false;

let a:boolean;
a = true;

3、数字

let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制

//数字类型
let age:number;
age = 20;

4、字符串

let name: string = "bob"
let username:string = `aaabbbccc`

5、any 和 unknown

any 任意类型,当前定义的变量,不知道它是什么类型

let app:any = 66
let app:unknown = 66

// let arg: any;
let arg: unknown;
arg = 10;
arg = 'aa'
arg = true;

6、void

它表示没有任何类型,声明一个void类型的变量没什么大用,因为你只能为它赋予undefined 和 null,一般多用于函数返回值指定。

//void 用于函数的返回值,如果一个函数没有返回值,就可以用它
function fn(): void {
  console.log('我是没有返回值的函数')
  // 不写return
  // return null;
  // return undefined;
  // ========== 推荐写法 =======
  // return;
}
fn()

7、null 和undefined

undefined 和 null 两者各自有自己的类型分别是 undefined 和null。和void相似,它们本身的类型用处不是很大。

let u: undefined = undefined;
let n: null = null;

8、never

never 类型表示那些永不存在,永不结束的值的类型

//死循环,永不结束的函数
function kill():never {
	while(true){ }
}
//直接抛出错误的函数
function myException(): never {
  throw new Error("erro");
}
//不可能出现的值
function fn(name: string | number): void {
  if (typeof name === 'string') {
    console.log(name)
  } else if (typeof name === 'number') {
    console.log(name)
  }else{
    // never
    console.log(name)
  }
}

9、字面量

可以使用字面量去指定变量的类型,通过字面量可以确定变量取值的范围

let color: 'red' | 'blue' | 'green';
let num: 1 | 2 | 3;
//值只能在字面量中选一个
color = 'red';

10、枚举(enum)

创建枚举类型

// 如果定义的枚举,没有指定它的值,则默认从0开始
enum Color {
  Red,
  Green,
  Blue
}
// 可以直接打印 申明枚举类型
console.log(Color)
// 0
console.log(Color.Red)
如果定义的枚举,如果设置了枚举的值,则值就是为设置的值,如果你设置的值是数
据,则它下面的值从你设置向下累加
enum Color {
  Red = 2,
  Green,
  Blue
}
// 3
console.log(Color.Green) 
// 如果设置为字符串,需要全部设置
enum Color {
  Red = 'red',
  Green = 'green',
  Blue = 'blue'
}
// green
console.log(Color.Green)

给变量指定枚举类型

var c:Color
c = Color.Red;

常量枚举,不可以直接打印该枚举类型,但可以读里面的值。

const enum Color {
  Red = 'red',
  Green = 'green',
  Blue = 'blue'
}
// 不可以直接打印类型,但是可以读里面的值
console.log(Color.Red)
var c: Color
c = Color.Red;

11、object

// id是必须要有的,后面可以任意,key为字符串,值为任意类型
let obj:{id:number,name?:string}  // ?可选
//对象可以任意添加
var obj: { id: number, name: string, [prop: string]: any }
obj = { id: 1, name: '张三', a: 'b', c: true, d: 1 }
console.log(obj)
// 自定义类型
type userType = {
  id: number,
  name?: string,
  // [prop: string]: any
}

var obj: userType;
obj = { id: 1, name: 'aaa'}
// 类型设置函数定义  接口
type userFnType = {
  (id: number, name?: string): void
}
const userFn: userFnType = (id: number, name: string): void => {
  console.log('返回值')
}
userFn(1, 'aaa')

12、array

定义数字类型的数组

var arr: number[];
//泛型定义
var arr: Array<number>

13、元组(tuple)

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。

定义一个值分别为string和number类型的元组

var arr: [string,number]
arr = ['a',1]

14、自定义类型

可以定义复杂的类型,为业务所用;且便于代码可维护性

自定义对象类型

type objType = { id: number, name: string, [prop: string]: any }

var obj: objType
obj = { id: 1, name: 'zhangsan' }

定义数组对象

type objType = { id: number, name: string }

// var arr: Array<objType>
var arr: objType[];
arr = [{
    id: 1,
    name: 'lisi'
}]

限制函数的参数和返回值

// type fnType = (id:number,name:string) => string
type fnType = {
    (id: number, name: string): string
}

var fn: fnType = (id, name) => {
    return name;
}
fn(1, 'aa')

15、联合类型

给变量指定多个类型

var id:number | string

function fn(par:string|number){
}

16、类型断言

有些情况下,变量的类型对于我们来说很明确,但是TS编译器却并不清楚,此时可以通过类型断言告诉编译器变量的类型。
断言的两种形式:

var str: number | string
// 形式1
// console.log((str as string).length);
//形式2
console.log((<string>str).length);

//断言的特殊情况
//变量后加 ! 表示不能为null,加 ? 表示可以为null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值