TypeScript的类型声明

本文介绍了TypeScript中的类型声明,它是TS的重要特性,允许指定变量、参数的类型,以确保赋值的正确性。TS还具有自动类型判断机制,在声明和赋值同时进行时可省略类型声明。文中提到了多种类型,如数字、字符串、联合类型、any、unknown、void、never、object、数组、元组、枚举以及类型别名,并举例说明了它们的用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.类型声明

类型声明是TS非常重要的一个特点

通过类型声明可以指定TS中变量(参数,形参)的类型

指定类型后,当为类型赋值时,TS编译器会自动检查值是否有符合类型声明,符合则赋值,否则报错

简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值

语法:

let a: number = 123;//声明一个变量a,同时指定它的类型为number

// a的类型设置为number,在以后使用的过程中a的值只能是数字
a = 9
// a = 'hello' 会报错

function sum(a: number, b: number): number {
  return a + b;
}
console.log(sum(123, 456))

二.自动类型判断

TS拥有自动的类型判断机制

当对变量的声明和赋值是同时进行的,使得变量只能存储某种类型的值

所有如果你的变量的声明和赋值是同时进行的,可以省略掉类型声明

三.类型

// 直接使用字面量进行类型声明
let b: 10
// b = 11 会报错,不能将类型“11”分配给类型“10”

// 可以使用“|”连接多个类型(联合类型)
let gender: "male" | "female"
gender = "male"
gender = "female"

let c: boolean | string
c = false
c = "hello"

// any 表示任意类型,相当于关闭了ts的类型检测; 声明时如果不指定类型,ts解析器会自动判断变量的类型为any(隐式any)
let d: any
d = 111;
d = true
d = "world"

// unknown 表示未知的类型,不能直接赋值给其它变量,实际上就是一个类型化安全的any
let e: unknown = 10
let s: string
s = d //d的类型是any,s是string,d可以赋值给任意变量,不会报错
// s = e  会报错,不能将类型“unknown”分配给类型“string”

// 类型断言,可以用来告诉解析器变量的实际类型
// 语法: 1 变量 as 类型 2 <类型>变量
s = e as string
console.log('s', s) // 10
s = <string>e

// void 用来表示为空,以函数为例,就表示没有返回值的函数
function fn1(): void {
  return
}

// never 表示永远不会返回结果,用来抛出错误
function fn2(): never {
  throw new Error("出错了!")
}

// object表示一个对象
let a2: object
a2 = {}
a2 = function () { }
// {}用来指定对象中包含哪些属性 语法:{属性名:属性值}
// 在属性名后加上?,表示属性是可选的
let a3: { name: string, age?: number }
a3 = { name: "孙悟空" }
a3 = { name: "孙悟空", age: 500 }
// [propName{ame:string]:any
let a4: { name: string, [propName: string]: any }
a4 = { name: "孙悟空", age: 500, gender: "male" }
// 用来定义函数结构的类型声明
// 语法:(形参:类型,形参:类型,...) =>返回值
let fn3: (a: number, b: number) => number
fn3 = (n1, n2) => {
  return n1 + n2
}

// 数组的声明方式
// 语法 类型[] Array<类型>
let arr: string[] // 表示字符串数组
let arr2: number[]
let arr3: Array<string>

// tuple(元组:就是固定长度的数组)
let tu: [string, string]
tu = ["hello", "world"]

// enum 枚举
enum Gender {
  Male,
  Female,
  Xmale
}
let enum1: { name: string, gender: Gender }
enum1 = {
  name: "孙悟空",
  gender: Gender.Male

}

// 类型的别名
type MyType = 1 | "hello" | 3 | true | 5
let f: MyType
f = 1
f = "hello"
f = true
// f = 6 报错,

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值