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;
相关推荐
Hilaku19 分钟前
为什么前端应该主动去学数据库?
前端·javascript·程序员
朱 欢 庆29 分钟前
el-table 表格组件二次封装
javascript·vue.js·elementui
牢姐与蒯1 小时前
Linux信号(一).信号产生
linux·运维·服务器·ubuntu
FYKJ_20102 小时前
springboot刑事案件管理系统03047-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
怕浪猫3 小时前
分享一个做视频的skill,这条白板视频,每一笔都是代码画的
前端·javascript·面试
OpsEye6 小时前
当企业不再只关心能不能调用模型,而是关心值不值得调用
javascript·ai编程
用户0934077735146 小时前
HarmonyOS WPS Open SDK 实践:从 HAR 集成到 OpenFileRequest 最小闭环
typescript·harmonyos
FYKJ_20106 小时前
springboot雅集社区养老管理系统04456-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django
FYKJ_20106 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
javascript·vue.js·spring boot·mysql·typescript·spark·express
FYKJ_20107 小时前
springboot羽毛球场地管理系统00626-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·typescript·spark·django