TypeScript数据类型

目录

一、TS介绍

TypeScript=Type+JavaScript,即在JavaScript基础上封装了一层,添加了类型支持 。添加类型支持的原因是JS代码中的运行错误绝大部分都是类型错误,而TS可以在编译阶段检查变量的类型是否发生变化

因此要运行TS代码需要使用tsc命令将TS代码.ts编译 生成JS代码.js,然后运行编译后的JS代码。

二、数据类型

TS中使用: 类型来声明变量的类型。

  • JS已有类型
    • 基础类型:number/string/boolean/null/undefined/symbol
    • 引用类型: object(数组/函数/对象),TS中对于每个对象类型有不同的写法。
  • TS新增
    • 联合类型、自定义类型、接口、元组、字面量类型、枚举、void、any

1.基础类型

typescript 复制代码
let flag: boolean = false
let a: null = null
let b: undefined = undefined
......

2.数组、联合类型

typescript 复制代码
// 数组类型
let nums: number[] = [1,3,5]

// 联合类型:用于数组中需要有多种类型时
let n_s: (number | string)[] = ['a', 'b', 1]

3.元组

限定了数组中元素个数的数据类型叫元组。

typescript 复制代码
let tuple: [numbers, numbers] = [1,2]

4.函数参数和返回值类型(函数类型)

typescript 复制代码
// 两种写法
function add(let num1: number, let num2: number): number{
	return num1 + num2
} 
const add = (num1: number, num2: number): number =>{
	return num1 + num2
}

// 使用?规定可选参数,可选参数在函数调用时可传可不传
function add(let num1?: number, let num2?: number): number{
	return num1 + num2
}

5.类型别名(自定义类型)

typescript 复制代码
type StringNumberArray = (number | string)[] 
let n_s: StringNumberArray = ['a', 'b', 1]

6.类型断言

通过getElementById()获取到的标签默认是HTMLElement类型,只能访问标签的公共属性,如果想访问不同标签的特有属性就需要使用类型断言进行类型转换。

typescript 复制代码
const hrefObject = Document.getElementById("href1") as HTMLAnchorElement;
console.log(hrefObject.href);

7.字面量类型

字面量类型配合联合类型用来约束变量取固定集合中的值,即枚举。

typescript 复制代码
function changeDirection(direction: ('left' | 'right' | 'up' | 'down')){
	return direction
}

console.log(changeDirection("left"))

8.枚举类型

typescript 复制代码
enum Direction{
    LEFT = 'left',
    RIGHT = 'right',
    UP = 'up',
    DOWN = 'down'
}

let d = Direction.LEFT

9.对象

typescript 复制代码
type Person = {
	name: string; 
	age: number; 
	toString(str: string): string
}

let zhangsan: Person = {
	name: '张三',
	age: 18,
	toString(str: string){
		return str;
	}
}

10.接口

typescript 复制代码
interface Person{
	name: string; 
	age: number; 
	toString(str: string): string
}

let zhangsan: Person = {
	name: '张三',
	age: 18,
	toString(str: string){
		return str;
	}
}

11.类

类的成员变量和方法有public/protected/private三种修饰符,默认public。protected修饰的元素进能在类定义中访问,实例无法访问;private修饰的元素不仅实例无法访问,子类的定义中也无法访问。

typescript 复制代码
class Person{
	name: string; 
	age: number; 

	constructor(name: string, age: number){
        this.name = name;
        this.age = age;
    }

    toString(str: string): string{
        return str + this.name;
    }
}

const p = new Person('zhangsan', 16);
p.toString('123')

三、类型操作

1.类型兼容

TS采用结构化类型系统(Java是标明类型系统),相同结构 但是不同名称的类、接口可以互相转换,对于具有父子结构的类、接口即使没有显示的继承关系也能自动向上转型。

typescript 复制代码
class C1{
    f1: number;
}

class C2{
    f1: number;
    f2: number;
}

const c: C1 = new C2()

2.类型交叉

类型交叉可以组合多个类、接口。

typescript 复制代码
class C1{
    f1: number;
}

class C2{
    f2: number;
}

type C3 = C1 & C2;
相关推荐
Patrick_Wilson9 小时前
前端解析接口数据,到底该不该信任后端?聊聊「防御性编程」与「类型契约」的边界
架构·typescript·代码规范
zithern_juejin9 小时前
Symbol.hasInstance详解
javascript
ZengLiangYi9 小时前
插件式架构设计:SourceAdapter 接口抽象
前端·javascript·后端
cc.ChenLy9 小时前
大文件断点续传原理总结和Demo示例详解
javascript·vue.js·文件上传·大文件断点续传
程序员祥云9 小时前
VUE2_TO_VITE_VUE3
javascript·vue.js·ecmascript
苏瞳儿9 小时前
vue3+pinia+mqtt实时响应连接
前端·javascript·vue.js
蜡台10 小时前
VUE 侧边按钮组,可自定义位置
前端·javascript·css
AI科技星10 小时前
维度原本——基于超复数谱系的全域维度统一理论
c语言·前端·javascript·网络·electron
遇事不決洛必達10 小时前
【爬虫随笔】常见加密算法特征总结
javascript·爬虫·逆向·加密算法