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;
相关推荐
码艺-Alimjan2 小时前
维吾尔语 RTL 排版的隐形利器:`\u200F`
前端·javascript
Highcharts.js2 小时前
Highcharts 数据过滤实战指南:从基础实现到性能优化
javascript·性能优化·bi·highcharts·前端可视化·数据过滤·交互图表
何何____3 小时前
TypeScript 函数类型兼容性
前端·javascript·typescript
雪芽蓝域zzs3 小时前
json数据转化成interface属性
前端·javascript·json
鬼手点金4 小时前
ReAct 循环
linux·服务器·前端·javascript·react.js·前端框架
雪芽蓝域zzs4 小时前
Vue导入方法三种方式对比
前端·javascript·vue.js
VimorphTech6 小时前
React 任务轮询,为什么不能只写一个 setInterval?
javascript·typescript
lexiangqicheng6 小时前
Docker的沙箱机制是怎样的?
前端·javascript
LCG米8 小时前
STM32 HardFault故障定位实测:压栈帧寄存器解析、CFSR故障源判读与出错地址回溯
前端·javascript·stm32·单片机·嵌入式