首页 > 其他分享 >Typescript ----基础类型

Typescript ----基础类型

时间:2022-11-22 10:23:20浏览次数:67  
标签:function Typescript name number ---- let 类型 string

typescript 入门介绍

开始阶段 推荐使用 线上[Playground]https://www.typescriptlang.org/play

基础数据类型

  1. 布尔值
let isDone:boolean = false
let hasDone: boolean = Boolean(1)
  1. 数值型
let age: number = 23
  1. 字符串
let name: string = 'zhansan'
  1. null 和 undefined
let u: null = null
let un: undefined = undefined

默认情况下,unll 和 undefined 是所有类的子类, 也就是他可以赋值给其他的类型
例如

let num: number = undefined

如果在 tsconfig 中指定了 strictNullCheck 标记,null 和 undefined 只能赋值给 void 和各自的类型
5. any 类型
any 类型可以被赋值为任何类型的值,
可以访问任何属性
申明变量的时候没有指定类型,会给一个 any 类型
6. unknown
unknown 是 any 类型对应的安全类型
所有类型也都可以赋值给 unknown 类型
unknown只能赋值给 any 类型和 unknown 类型本身

在使用unknown 的时候, 我们需要 对他进行 type guard

function foo (x: unknown) {
  if (typeof x == 'string') {
    .....
  }
  if (typeof x == 'number') {
    .....
  }
}
  1. void 表示没有任何类型
    通常用在 方法中 表示没有返回值
function alertName (): void {
  alert('name')
}
  1. never 表示的是永不存在的类型
    比如 抛出错误, 后面就不会执行了
function error (message: string): never {
  throw new Error(message)
}
  1. 数组
    定义的写法
let array: number[] = [1,2,3,4,5]
let array1: Array<number> = [1,2,3,4,5]
  1. 元组 和数组相比
    它的长度是有限的,
    各个位置上类型是确定的,而且可以不同
let tom: [string, number] = ['tom', 25]

对类型和长度都有限定

  1. 枚举
    取值限定在一定范围内的类型
enum Direction {
  NORTH,
  SOUTH,
  EAST,
  WEST
}
let dir: Direction = Direction.WEST

默认情况下初始值是 0 ,其余的会自增长 加 1
也可以指定枚举值

enum Direction {
  NORTH = 'NORTH',
  SOUTH = 'SOUTH',
  EAST = 'EAST',
  WEST = 'WEST'
}
  1. 接口类型 interface 比较重要的一个类型
    定义一个对象的内容格式
interface Person {
  name: string,
  age: number
}
let zhansan: Person = {
  name: 'zhansan',
  age: 34
}

定义的变量属性 不能多余或者少于 interface 定义的 个数

let zhansan: Person = {
  name: 'zhansan',
  age: 34,
  gender: 'male'
}

多了一个 gender 属性, 但是在 Person 类中没有定义, 会报错
定义类的时候,可以使用 添加 ? 来定义 一个属性 可以出现, 也可以不出现

interface Person {
  name: string,
  age?: number
}

上面定义的 age 属性 添加 ? 后, 在这个类中 age 属性 可以出现, 也可以不出现, 出现的时候 名字一定还是 age
只读属性
在属性的前面 添加 readonly

interface Person {
  readonly id: number,
  name: string,
  age?: number
}
  1. 函数
  • 定义函数参数和返回值类型
function add(x: number, y: number): number {
  return x + y
}

定义了一个函数, 有两个参数,类型都是 number , 返回值是 number

  • 函数的参数中 定义可选参数 使用? 定义在必选参数的后面
function add(x: number, y?: number): number {
  if (y) {
    return x + y
  } else {
    return x
  }
}
  • 剩余参数
function push (array: number[], ...items: number[]) {
  items.forEach(function (item) {
    array.push(item)
  })
}
let a = []
push(a, 1,2,3,4)
  • 函数表达式
let idGenerator: (charts: string, number: number) => string
function createUserId (name: string, id: number): string {
  return name + id
}

IdGenerator = createUserId
// 等效于 
let idGenerator: (charts: string, number: number) => string = (name: string, id: number): string {
  return name + id
}
  • 函数重载 允许函数接受不同数量或者类型的参数,做出不同的处理
function add (a: number, b: number): number
function add (a: string, b: string): string
function add (a: string, b: number): string
function add (a: number, b: string): string
function add (a: string | number, b: string | number) {
  if (typeof a == 'string' || typeof b == 'string') {
    return a.toString() + b.toString()
  }
  return a + b
}
  • 静态属性,静态方法 static
    静态属性和方法是存在 类上面的, 不是在实例上的。
class Animal {
  readonly name;
  public constructor (name) {
    this.name = name
  }
  static isAnimal (a) {
    return a.instanceof Animal
  }
}
let a = new Animal('tom')
Animal.isAnimal(a) // true
a.isAnimal(a) // error
  • public 定义的公共方法属性
  • private 定义的属性,只能在类中调用和访问,子类中也不能访问
  • protected 相对宽松些, 在子类中能够调用
class Animal {
  protected name;
  public constructor (name) {
    this.name = name
  }
}
class Cat extends Animal {
  constructor(name) {
    super(name)
    console.log(this.name)
  }
}
  • readonly 是一个定义属性 为只读, 不能修改
  • 抽象类 abstract
    抽象类不能被实例化
    抽象类中的抽象方法,在必须在子类中实现
abstract class Animal {
  public name;
  public abstract sayHi()
}
class Cat extends Animal {
  public sayHi() {
    console.log('99' + this.name)
  }
}

下一篇将继续介绍 进阶类型

下面是我的小程序体验码,希望能和大家共同学习进步

标签:function,Typescript,name,number,----,let,类型,string
From: https://www.cnblogs.com/buxiugangzi/p/16914267.html

相关文章

  • 设备堆叠\虚拟化
    堆叠/虚拟化简介:它的核心思想是将多台设备连接在一起,进行必要的配置后,虚拟化成一台设备。使用这种虚拟化技术可以集合多台设备的硬件资源和软件处理能力,实现多台设备的协......
  • 浅析vm.$set方法
    先上官方文档:vm.$set(target,propertyName/index,value)参数:{Object|Array}target{string|number}propertyName/index{any}value返回值:设置的值。用法:......
  • Entity Framework 6 Oracle DbConfiiguration
    EntityFramework6OracleDbConfiiguration不想配置EntityFramework6的App.Config文件时,要重写DbConfiguration,还要AppConfig当中的所有关于EntityFramework的所有配......
  • nas 助手开发计划
    nas助手开发计划nasassistant文件管理批量修改文件名云盘同步自定义条件删除文件编辑资源搜刮磁力搜刮网盘搜刮在线资源搜刮订阅迅雷和其他工具......
  • VS 新版本无法打开旧项目问题处理
    问题最近想阅读WorkflowCore的源码,苦于代码量巨大,就想将项目回退到InitCommit版本但是在回退版本后,工程内Project显示已卸载重新加载后提示:不支持Thisversio......
  • 前端 堆、栈 概念和区别
    1.概念栈:先进后出,由操作系统自动分配释放,存放函数的参数值、局部变量值等。其操作方式类似于数据结构中的栈;是一种运算受限的线性表;堆:先进先出,动态分配的空间一......
  • .NET C#获取当前网页地址信息
    .NETC#获取当前网页地址信息.NETC#获取当前网页地址信息.NETC#获取当前网页地址信息设当前页完整地址是:http://www.jb51.net/aaa/bbb.aspx?id=5&name=kelli"http:......
  • P3178 [HAOI2015]树上操作 的dfs序题解
    操作1:把某个节点x的点权增加a。操作2:把某个节点x为根的子树中所有点的点权都增加a。操作3:询问某个节点x到根的路径中所有点的点权和。//点修改+树修改,(点......
  • 森林野火故事2.0:一眼看穿!使用 Panel 和 hvPlot 可视化 ⛵
    ......
  • cookie和session token
    面试常考①Cookie可以存储在浏览器或者本地,Session只能存在服务器②session能够存储任意的java对象,cookie只能存储String类型的对象③Session比Cookie更具有安全......