一文了解TypeScript数据类型

目录
  • 基础类型
  • any类型
  • 数组
  • 元组
  • Interface
  • 函数
  • 类型自推
  • 联合类型(二选一甚至多选一)
  • class
  • 枚举

基础类型

ts中支持更多的类型

let age: number = 10 // Number
let firstName: string = '凉宸' // String
let lastName: string = '凉宸' // String
let isMary: boolean = true // boolean
let unde: undefined = undefined // undefined
let nu: null = null // null

undefinednull 可以作为值赋值给其他类型,因为这两个可以看作其他类型的子类型

赋值的时候一定要根据定义的数据类型做赋值,否则会有如下提示错误

  • 声明变量时,类型与值不符
  • 为变量重新赋值时,类型与值不符

any类型

有的时候我们无法确定变量类型,我们可以将其指定类型为any

当我们赋值给其any类型后,可以为其赋任意值,且不会报错

let isAny:any='任意类型any'
isAny=520
isAny=true
isAny=null

但是为了避免类型不明确,我们还是尽量少使用any

any 类型的特点

  • 允许赋值为任意类型
  • 可以访问任意属性和方法
let userName: any = '凉宸';
// 可以访问任意属性
console.log(userName.name);
console.log(userName.name.firstName);
// 可以调用任意方法
userName.setName('David');
userName.setName('David').sayHello();
userName.name.setFirstName('David');

数组

我们可以指定数组内元素类型

let ages: number[] = [5, 20, 13, 14]
let names: string[] = ['凉宸','路飞', '明世隐', '李杨勇']

类数组:

类数组是不会拥有数组拥有的方法,tsc能够自动识别两者

let arguments=[555,555,55]

function lei(){
  let arr:number=arguments
}

元组

基本类似于数组,但是类型可以是多种

let arr:[number,string,boolean]=[520,'凉宸',true]

我们在赋值时一定要根据类型顺序填写

元素能多不能少

let arr:[number,string,boolean]=[520,'凉宸',true]
arr.push('b') // 可以
arr.push(4) // 可以
arr.push(true) // 可以
console.log(arr)
let arr:[number,string]=[520,'凉宸']
arr.push('b') // 可以
arr.push(4) // 可以
arr.push(true) // 不可以
console.log(arr)

Interface

  • 接口可以理解为纲领、比较抽象,其中不会规定的具体的行为,也就是说接口中,我们只定义有属 性,哪些方法以及属性的类型,方法的抽象,不会为属性赋值,也不会定义方法的实现
  • 类的话一般属性要赋值,方法也要有实现
  • Interface 的声明像 class,成员更像字面量对象,而不是 class

作用:

  • 对对象的形状(shape)进行描述
  • Duck Typing(鸭子类型)
interface Point{
  userName:string|number
  password:number
}  // 此时执行tsc不会解析出相应的js代码,因为此类型是ts特有的,只是表示约束
interface Point{
  userName:string|number
  password:number
}

let value:Point={
  userName:'admin@qq.com',
  password:123456
}

let val:Point={
  userName:55555,
  password:123456
}  // 此时两种都符合,在执行tsc

// 只是出现如下代码,没有任何约束js
var value = {
    userName: 'admin@qq.com',
    password: 123456
};
var val = {
    userName: 55555,
    password: 123456
};

可选属性 ?

创建 IPerson 接口类型变量时,接口中声明的属性,变量赋值时也必须有,否则就会报错

但我们可以设置某个属性为可选属性,在创建变量时,就可以选择赋值

interface Point{
  userName:string|number
  password:number,
  email?:string
}

let value:Point={
  userName:'admin@qq.com',
  password:123456
}

let val:Point={
  userName:55555,
  password:123456
}

只读属性readonly

interface Point{
  userName:string|number
  password:number,
  email?:string,
  readonly address:string
}

let value:Point={
  userName:'admin@qq.com',
  password:123456,
  address:'保定'
}

let val:Point={
  userName:55555,
  password:123456,
  address:'北京'
}
value.password=65975222
value.address='kkk'

函数

ts中函数可以定义返回值类型

const value=():number=>{
  return 1
}

const val=():string=>{
  return 1
}

类型自推

在我们定义变量时没有赋予类型,则会按照值做推论

let value=5555

value='string'

联合类型(二选一甚至多选一)

let value:string|number
value='凉宸'
value=520
value=true

类型断言:

function get(data:string|number):number{
  const str=data as string
  if(str.length){
    return str.length
  }else {
    const num = data as number
    return num.toString().length
  }
}

console.log(get('凉宸'));
console.log(get(520));

  • 使用 as 进行断言
  • 断言不是类型转换,断言后只是告诉编译器变量的类型,后面使用变量时就有提示了
  • 如果不添加断言,使用某个类型的方式就会报错

type guard:

type guard不是一种类型,而是一种能够确认具体类型的一种机制

function get(data:string|number):number{
  if(typeof data==='string'){
    return data.length
  }else {
    return data.toString().length
  }
}

console.log(get('凉宸'));
console.log(get(520));

class

class:类,ES6语法,是js面向对象晋升,class 仅仅是语法糖,底层仍然是基于函数和原型实现的

  • 类:定义了一切事物抽象特点,像是一张蓝图、一张图纸
  • 对象:类的实例
  • 三大特征:封装、继承、多态

三个修饰符,可以控制类中成员的访问级别:

  • Public:修饰的属性或方法是公有的,任何地方都可以访问,默认行为
  • Protected:修饰的属性或者方法是受保护的,只有类本身和其子类可以访问
  • Private:修饰的属性或者方法是私有的,只有类内部可以访问呢
class  Person {
  public name:string
  protected age:number
  private address:string
  constructor(name:string,age:number,address:string){
    this.name=name
    this.age=age
    this.address=address
  }
  speak(){
    console.log(`Person:${this.name}---${this.age}---${this.address}`)
  }
}
const Children = new Person('凉宸',20,'保定')
Children.speak()
// 可以正常输出

class  Person {
  public name:string
  protected age:number
  private address:string
  constructor(name:string,age:number,address:string){
    this.name=name
    this.age=age
    this.address=address
  }
  speak(){
    console.log(`Person:${this.name}---${this.age}---${this.address}`)
  }
}

class child extends Person{
  say(){
    console.log(`child:${this.name}---${this.age}`)
  }
}
// const Children = new Person('凉宸',20,'保定')
// Children.speak()
const childs = new child('凉宸',20,'保定')
childs.say()

运行时也是报错的

class  Person {
  public name:string
  protected age:number
  private address:string
  constructor(name:string,age:number,address:string){
    this.name=name
    this.age=age
    this.address=address
  }
  speak(){
    console.log(`Person:${this.name}---${this.age}---${this.address}`)
  }
}

class child extends Person{
  say(){
    console.log(`child:${this.name}---${this.age}`)
  }
}
// const Children = new Person('凉宸',20,'保定')
// Children.speak()
const childs = new child('凉宸',20,'保定')
childs.say()

class  Person {
  public name:string
  protected age:number
  private address:string
  constructor(name:string,age:number,address:string){
    this.name=name
    this.age=age
    this.address=address
  }
  speak(){
    console.log(`Person:${this.name}---${this.age}---${this.address}`)
  }
}

class child extends Person{
  say(){
    console.log(`child:${this.name}---${this.age}`)
  }
}
const Children = new Person('凉宸',20,'保定')
Children.speak()
console.log(Children.address);
console.log(Children.age);

// const childs = new child('凉宸',20,'保定')
// childs.say()

枚举

枚举(Enum)类型用于取值被限定在一定范围内的场景

enum Week {
  SUNDAY = '周日',
  MONDAY = '周一',
  TUESDAY = '周二',
  WEDNESDAY = '周三',
  THURSDAY = '周四',
  FRIDAY = '周五',
  SATURDAY = '周六'
}
function getProgramme(date: Week): string {
  if (date === Week.SUNDAY) {
  return '周日休闲娱乐'
  } else if (date === Week.MONDAY) {
  return '周一做博文'
  } else if (date === Week.TUESDAY) {
  return '周二冲刺'
  }
  else if (date === Week.WEDNESDAY) {
  return '周三继续奋斗'
  }
  else if (date === Week.THURSDAY) {
  return '周四发新文'
  }
  else if (date === Week.FRIDAY) {
  return '周五准备休息'
  }
  else {
  return '周六睡觉'
  }
  }
  console.log(getProgramme(Week.THURSDAY));

到此这篇关于一文了解TypeScript数据类型的文章就介绍到这了,更多相关TypeScript数据类型内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • TypeScript入门-基本数据类型

    大致介绍 TypeScript是由C#语言之父Anders Hejlsberg主导开发的一门编程语言,TypeScript本质上是向JavaScript语言添加了可选的静态类型和基于类的面向对象编程,它相当于是JavaScript的超集 ES5.ES6和TypeScript的关系: 安装 首先需要安装npm,然后在输入 npm install -g typescript 安装完成后,因为TypeScript是以.ts结尾的,要想运行就得把他编译js文件,编译的方法特别简单就是使用tsc命令 ts

  • TypeScript 安装使用及基本数据类型

    第一步 全局安装TypeScript 使用 npm 安装 npm install -g typescript 使用cnpm 安装 cnpm install -g typescript 使用yarn安装 yarn global add typescript 第二步 初始化TypeScript 在vscode里面 终端 >> 运行生成任务 >> tsc:监视tsconfig.json 接下来就可以开始我们的typescript旅程了~ TypeScript 的 基本数据类型 // 布尔

  • 一文了解TypeScript数据类型

    目录 基础类型 any类型 数组 元组 Interface 函数 类型自推 联合类型(二选一甚至多选一) class 枚举 基础类型 ts中支持更多的类型 let age: number = 10 // Number let firstName: string = '凉宸' // String let lastName: string = '凉宸' // String let isMary: boolean = true // boolean let unde: undefined = unde

  • Typescript中的数据类型实例总结

    目录 是什么 有哪些 boolean number string array tuple enum any null和undefined void never object 总结 是什么 typescript和javascript几乎一样,拥有相同的数据类型,另外在javascript基础上提供了更加实用的类型供开发使用. 在开发阶段,可以为明确的变量定义为某种类型,这样typescript就能在编译阶段进行类型检查,当类型不符合预期结果的时候则会出现错误提示 有哪些 typescript的数据

  • TypeScript类型断言VS类型守卫示例详解

    目录 类型断言 类型守卫 使用 in 关键字 使用 instanceof 关键字 使用 typeof 关键字 自定义类型守卫 总结 类型断言 类型断言有两种写法,分别为value as Type和<Type>value,它让 TypeScript 编译器将 value 当作 Type 类型.类型断言是一个编译时特性,不进行类型转换,因此不会影响变量在运行时的数据类型.如果某变量是 any 类型,但现在你知道它确切的数据类型,使用类型断言能让 IDE 有代码提示的能力,也能让 TypeScrip

  • Vite引入虚拟文件的实现

    目录 背景 引入虚拟文件 例子 文档 Typescript支持 总结 背景 在新项目升级vue3以后,自然而然的就把vue-cli&webpack更换成了vite,不得不说vite真的很香,不仅编译速度刚刚的,而且在vue3的新功能上也有更好的支持. 不过在开发过程中也遇到了一些问题 在看到vite-plugin-pages插件之后,突然看到这样的写法: import routes from "virtual:generated-pages"; 其实在使用很多vite插件的时候

  • Postgresql数据库中的json类型字段使用示例详解

    目录 1. Json概述 2. Postgresql数据库中使用Json类型字段 2.1. 创建表定义字段信息 2.2. 增加 2.3. 查询键值 2.3.1. 查询键 2.3.2. 查询值 2.3.3. where查询条件使用json键值作为条件 PostgreSQL 最重要的文档性数据类型就是JSON了,与 MongoDB 的BSON相比较,PostgreSQL 或许更加强大,因为它能与原有的关系性范式兼容,给数据库存储与维护带来了更多的可行性和便利性. 1. Json概述 JSON 代表

  • TypeScript类型系统自定义数据类型教程示例

    目录 TypeScript 类型系统和自定义数据类型 什么是类型系统 函数类型 类型别名 可选参数 默认参数 函数重载 接口类型 可选属性 只读属性 接口扩展 多重接口声明 接口的索引签名 用接口描述函数 类类型 implements关键字 类的静态端类型和实例端类型 将 this 作为类型 将 this 作为参数 枚举 枚举类型 枚举的成员类型 枚举的成员 字面量类型 联合类型 交叉类型 泛型 泛型函数 泛型接口 泛型类 在工厂函数中使用泛型 泛型约束 在泛型约束中使用类型参数 在泛型中使用条

  • mongodb 数据类型(null/字符串/数字/日期/内嵌文档/数组等)

    MongoDB的文档类似于JSON,JSON只是一种简单的表示数据的方式,只包含了6种数据类型(null.布尔.数字.字符串.数组及对象). JSON的数据类型的局限性: 1.无日期类型,对日期型的处理较为繁琐 2.无法区分浮点数和整数.32位和64位 3.其他类型表示局限 如函数.正则式等 Mongodb使用BSON(Binary JSON)来组织数据,BSON还提供日期.32位数字.64位数字等类型.下面为在mongodb shell中这些类型在文档中是如何表示: 1.null  用于表示空

  • 一文搞懂C# 数据类型

    在 C# 中,变量分为以下几种类型: 值类型(Value types) 引用类型(Reference types) 指针类型(Pointer types) 值类型(Value types) 值类型变量可以直接分配给一个值.它们是从类 System.ValueType 中派生的. 值类型直接包含数据.比如 int.char.float,它们分别存储数字.字符.浮点数.当您声明一个 int 类型时,系统分配内存来存储值. 下表列出了 C# 2010 中可用的值类型: 类型 描述 范围 默认值 boo

随机推荐