1,类型总览

类型 例子 描述
number 1、2、3 任意数字
string 'xxx' 任意字符串
boolean true / false 布尔值
undefined const n: undefined = undefined 一个没有被赋值的变量
null const n: null = null 尚未创建的对象
object { name: '' } 任意对象
array [1, 2, 3] 任意数组
Symbol let n: symbol = Symbol('k') 表示独一无二的值
BigInt let n: bigint = BigInt(9007199254740991) 内置对象 表示大于253 - 1的整数
字面量 let a:'hello' = 'hello' 其本身
any 任意值 任意类型的值
unknown 任意值 安全类型的any
void let a: void = undefined 没有值或者undefined
never (): never => {} 永不存在的值
tuple [1, 2, 3] 元组 固定值和长度的数组
enum enum Color {Red, Green} 枚举 用于取值被限定在一定范围内的场景

2,基本类型


2.1,布尔

let isDone: boolean = false

2.2,数字

let isNum: number = 6

2.3,字符串

let name: string = 'bob'
name = 'smith'
let name2: string = `Genez${name}`

2.4,Null

let n: null = null

2.5,undefined

const n: undefined = undefined

2.6,symbol

let n: symbol = Symbol('k')

2.7,bigint

let n: bigint = BigInt(9007199254740991)

3,引用类型


3.1,数组 Array

  • 声明方式一
let list: number[] = [1, 2, 3]
  • 声明方式二
let list: Array<number> = [1, 2, 3]
  • 多类型数组
const arr1: (number | string)[] = [1, 'string', 2]
const arr2: Array<any> = [1, 'string', null]
  • 使用type约束的数组
type T = number | string
const arr: Array<T> = [1, '张三']
  • 使用interface约束的对象数组
interface Item {
id: number
name: string
isDad: boolean
}
const objectArr: Array<Item> = [{ id: 1, name: 'demo', isGod: true }]

3.2,对象 Object

  • 普通对象
const n: object = {
value: '',
size: 20
}
  • interface定义
interface Hero {
name: string
age: number
skill: string
skinNum?: number
say(): string // say函数返回值为 string
[keyName: string]: any // 当前Hero可定义任意字符串类型的key
} const t:Hero = {
name: '999',
age: 20,
skill: '',
say() {
return ''
},
kkk: ''
}
  • type定义
type Hero = {
name: string
age: number
skill: string
skinNum?: number
}
  • 任意类型
interface AnyObject {
[key: string]: any
} const t:AnyObject = {
name: '999',
age: 20,
skill: '',
kkk: null,
aaa: undefined
}

3.3,函数 Function

  • 普通定义函数
function fn(name: string, size: number, state?: number, text: string = '', ...param: number[]):object {
return {
name,
size
}
}
  • 箭头函数
const fn2: (a: number, b: string) => string = function (a:number, b:string): string {
return ''
}
  • 无返回值
const fn2: (a: number, b: string) => void = function (a:number, b:string): void {
console.log(a, b)
}
  • 使用interface定义函数
interface SearchFn{
(param1: string, param2: string): boolean
} const fn3:SearchFn = function(param1, param2) {
return param1 === param2
}
  • 不确定参数个数
function pu(array: any[], ...items: any[]) {
items.forEach(function(item) {
array.push(item);
});
}
let a = [];
pu(a, 1, 2, 3);

4,TypeScript新增类型

4.1,元祖 Tuple

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同,赋值的类型、位置、个数需要和定义(生明)的类型、位置、个数一致。

元组最重要的特性是可以限制数组元素的个数和类型,它特别适合用来实现多值返回,用于保存定长定数据类型的数据。

  • 例子
let uple: [string, string, number] = ["zed", "darts", 25]
  • 可选元素
let uple: [string, string, number?] = ["zed", "darts"]
  • 不定个数
type RestTupleType = [number, ...string[]]
let restTuple: RestTupleType = [666, "Semlinker", "Kakuqo", "Lolo"]
  • 只读
const point: readonly [number, number] = [10, 20]

4.2,枚举 enum

使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例。

  • 例子
enum Enum {
A,
B,
C
}
console.log(Enum.A) // 打印出 0
console.log(Enum.B) // 打印出 0
  • 设置初始值
enum Enum {
A = 8,
B,
C
}
console.log(Enum.A) // 打印出 8
console.log(Enum.B) // 打印出 9
  • 字符串枚举,每个都需要声明
enum Enum {
A = "8号",
B = "9号",
C = "10号"
}
console.log(Enum.A) // 打印出 8号

4.3,Any

在编程阶段还不清楚类型的变量指定一个类型,可以使用 any类型来标记这些变量

  • 例子
let notSure: any = 4
notSure = false
notSure = '' let list: any[] = [1, true, "free"]
list[1] = 100

4.4,Void

void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是void

  • 例子
function warnUser(): void {
console.log("xxxxxxxxx");
} // 只能为它赋予undefined和null
let unusable: void = undefined

4.5,Never

never类型表示的是那些永不存在的值的类型,抛出异常或者是死循环

  • 例子
// 异常
function err(msg: string): never { // OK
throw new Error(msg);
} // 死循环
function loopForever(): never { // OK
while (true) {};
}

4.6,Unknown

unknownany一样,所有类型都可以分配给unknown。与any的最大区别是: 任何类型的值可以赋值给any,同时any类型的值也可以赋值给任何类型。unknown 任何类型的值都可以赋值给它,但它只能赋值给unknownany

  • 例子
let notSure: unknown = 4;
let uncertain: any = notSure; // OK let notSure: any = 4;
let uncertain: unknown = notSure; // OK let notSure: unknown = 4;
let uncertain: number = notSure; // Error

4.7,字面量

使用一个字符串字面量类型作为变量的类型

  • 例子
let hello: 'hello' = 'hello';
hello = 'hi'; // 报错

如果看了觉得有帮助的,我是@鹏多多,欢迎 点赞 关注 评论;END


PS:在本页按F12,在console中输入document.querySelectorAll('.diggit')[0].click(),有惊喜哦


公众号

往期文章

个人主页

TypeScript学习第二天:认识ts的数据类型的更多相关文章

  1. TypeScript学习文档-基础篇(完结)

    目录 TypeScript学习第一章:TypeScript初识 1.1 TypeScript学习初见 1.2 TypeScript介绍 1.3 JS .TS 和 ES之间的关系 1.4 TS的竞争者有 ...

  2. Typescript学习笔记

    什么是 TypeScript TypeScript 是 JavaScript 的类型的超集,它可以编译成纯 JavaScript. 安装 TypeScript 命令行工具安装: npm install ...

  3. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. TypeScript——02——TS基本数据类型介绍和使用

    一,TS的数据类型 ES6的数据类型: 6种基本数据类型 Boolean Number String Symbol undefined null 3种引用类型 Array Function Objec ...

  5. 深入浅出 Typescript 学习笔记

    TypeScript 是 JavaScript 的一个超集,支持 ECMAScript 6 标准. TypeScript 由微软开发的自由和开源的编程语言. TypeScript 设计目标是开发大型应 ...

  6. typescript学习笔记(一)---基础变量类型

    作为一个前端开发者,学习新技术跟紧大趋势是必不可少的.随着2019年TS的大火,我打算利用一个月的时间学习这门语言.接下来的几篇文章是我学习TS的学习笔记,其中也会掺杂一些学习心得.话不多说,先从基础 ...

  7. TypeScript学习指南--目录索引

    关于TypeScript: TypeScript是一种由微软开发的自由和开源的编程语言.它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程. TypeS ...

  8. Typescript 学习笔记六:接口

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  9. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. JavaScript通过父节点ID递归生成JSON树

    JavaScript通过父节点ID递归生成JSON树: · 实现思路:通过递归实现(第一次递归的时候查询出所有的父节点,然后通过当前父节点id不断地去查询所有子节点,直到递归完毕返回)   · 代码示 ...

  2. 火爆的文字游戏你玩了吗?「GitHub 热点速览 v.22.06」

    不知道你有没有被 Wordle 这款游戏刷屏,在本期热点速览的特推部分选了一个 React 编写的开源版本同你分享,而本次公众号摘要也是一个提示, 只不过这个只能盲猜了.别小瞧 Wordle 这个游戏 ...

  3. TensorFlow 机器学习秘籍中文第二版·翻译完成

    原文:TensorFlow Machine Learning Cookbook 协议:CC BY-NC-SA 4.0 不要担心自己的形象,只关心如何实现目标.--<原则>,生活原则 2.3 ...

  4. Net6 DI源码分析Part1 ServiceCollection、ServiceDescriptor、ServiceLifetime、IServiceProvider

    ServiceCollection.ServiceDescriptor.ServiceLifetime.IServiceProvider Microsoft.Extensions.Dependency ...

  5. Java 中的锁原理、锁优化、CAS、AQS 详解!(转)

    1.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 2.锁实现的基本原理 2.1.volatile Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新, ...

  6. RedHat Linux 忘记密码

    一.无法进入系统 在虚拟机开机3秒时按e 选择第二个选项带有quite的那个 进入界面后,在quite后,空格+single 进入单用户模式 然后输入passwd +账号(要修改的账号) 输入新的密码 ...

  7. JS实现new关键字的功能

    一.前言 众所周知:没有对象怎么办?那就new一个! 那么在JS中,当我们new一个对象的时候,这个new关键字内部都干了什么呢? 现在我们就来剖析一下原生JS中new关键字内部的工作原理. 二.原始 ...

  8. js获取 url?后面的参数取值

    function GetRequest() {     var url = location.search; //获取url中"?"符后的字串     var theRequest ...

  9. 位运算符、|和||、&和&&的区别

    一.位运算符操作的都是整数类型 1.<<:左移,在一定范围内向左移动n位,相当于乘以2的n次幂 左移不管是正数还是负数,都是在后面添0: 2.>>:右移,在一定范围内向右移动n ...

  10. Junit4进行参数化测试

    @RunWith, 当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器. 要进行参数化测 ...