ts变量类型定义

ts中的类型包括:

  • 布尔类型(boolean)
  • 数字类型(number)
  • 字符串类型(string)
  • 数组类型(array)
  • 元组类型(tuple)
  • 枚举类型(enum)
  • 任意类型(any)
  • null 和 undefined
  • void类型
  • never类型

// 布尔类型的变量,值只能为 true 或者 false
let b:boolean = false
console.log(b) // false

//  数字类型的变量,值只能为整数、浮点数
let num1:number = 12
console.log(num1) // 12
let num2:number = 12.345
console.log(num2) // 12.345

// 字符串类型的变量,值只能为字符串
let str:string = '字符串'
console.log(str) // 字符串

// 数组类型的变量有两种定义方式
// 方式一:  变量名:类型[] = [值1,值2,...]
let arr1:number[] = [1, 2, 3]
console.log(arr1) // [1, 2, 3]
// 方式二:  变量名:Array<类型> = [值1,值2,...]
let arr2:Array<string> = ['a', 'b', 'c']
console.log(arr2) // ['a', 'b', 'c']

// 元祖类型属于数组的一种
// 元祖类型的变量,值的顺序以及个数必须与定义时一致
let t:[string, number, boolean] = ['zs', 10, true]
console.log(t) // ['zs', 10, true]

// 枚举类型
enum color {'red', 'green'=5, 'blue'}
console.log(color.red) // 0   如果标识符没有赋值 它的值就是下标,值默认从0开始
console.log(color.green) // 5 赋了确定值,则返回给定的值
console.log(color.blue) // 6 虽然没有给赋值,但是前面的元素有值,所以这个元素的取值要根据前面的元素值变化

// 任意类型
// 定义为任意类型的变量可以随意切换类型
let g:any = 1
console.log(g) // 1
g = 'zs'
console.log(g) // zs
g = true
console.log(g) // true

// null类型的变量,值只能设为null
let h:null = null
console.log(h) // null

// undefined类型的变量,初始值只能设为undefined
let i:undefined = undefined
console.log(i) // undefined
// 定义一个变量,但是不赋初始值,则初始值默认为undefined
let un:number  
console.log(un) //undefined 能通过编译,但是编辑器会提示“在赋值前使用了变量“un””


// void类型一般用于没有返回值的函数
function fun():void {
  console.log('没有返回值的函数')
}
fun()

// never类型:是其他类型 (包括 null 和 undefined)的子类型,代表从不会出现的值。这意味着声明never的变量只能被never类型所赋值。

// 如果变量类型不确定,在定义的时候可以用 | 
// 例如,变量可能是number类型,也可能是string类型
let data:number | string
data = 1
console.log(data) // 1
data = '变成字符串了'
console.log(data) // 变成字符串了
### 定义 Map 数据类型的几种方式 在 TypeScript定义 `Map` 的数据类型可以通过多种方式进行,每种方法都有其适用场景。 #### 使用泛型参数声明键值对类型 最常见的方式是通过指定两个泛型参数来定义 `Map<K,V>` 类型中的 K V。这允许开发者精确控制存储于映射表内的键对应的值的数据类型[^1]: ```typescript let stringNumberMap: Map<string, number> = new Map(); stringNumberMap.set('one', 1); stringNumberMap.set('two', 2); // 或者更复杂的对象作为value interface Person { name: string; age: number; } let personMap: Map<number, Person> = new Map([ [1, {name: 'Alice', age: 25}], [2, {name: 'Bob', age: 30}] ]); ``` #### 利用接口或类型别名增强类型安全性 当涉及到较为复杂的应用逻辑时,可以考虑创建自定义接口或类型别名以提高代码可读性维护性[^2]: ```typescript type StringToPersonMapping = Map<string, Person>; const peopleByName: StringToPersonMapping = new Map(); peopleByName.set('alice@example.com', {name: 'Alice', age: 25}); peopleByName.set('bob@example.org', {name: 'Bob', age: 30}); ``` 这种方式不仅限定了具体的 key-value 组合形式,还使得后续操作更加直观易懂。 #### 结合工具函数简化初始化过程 对于某些特定情况下频繁使用的 map 初始化模式,编写辅助性的工厂函数能够有效减少重复劳动并保持一致性[^3]: ```typescript function createStringToObjectMap<T>(entries?: readonly (readonly [string, T])[]): Map<string, T> { return new Map(entries || []); } const userSettings = createStringToObjectMap([ ['theme', 'dark'], ['language', 'en-US'] ]); console.log(userSettings.get('theme')); // Output: dark ``` 上述例子展示了如何利用 TypeScript 提供的强大静态类型检查机制,在不影响灵活性的前提下增强了程序的安全保障水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值