Skip to content

一、类型声明基础

一、基础类型

typescript
 let str: string = 'foo' // 字符串类型 
 let bol: boolean = true // 布尔类型 
 let num: number = 123 // 数字类型 
 let nul: null = null // null 类型 
 let an: any = 1 // any 类型,⚠ 尽量少⽤ any 类型
typescript
let und: undefined = undefined // ❌ uts ⽬前不⽀持 undefined 类型

二、类型推断

绝⼤多数的类型会被⾃动推断

typescript
 let str = 'foo' // 字符串类型 
 let bol = true // 布尔类型 
 let num = 123 // 数字类型 
 let nul = null // null 类型

三、复杂类型

(1)数组

我们可以通过 Array<类型> 或者 类型[] 来定义数组类型

typescript
 //定义string数组
 let a1: Array<string> = ["uni-app", "uniCloud", "HBuilder"] 
 let a2: string[] = ["uni-app", "uniCloud", "HBuilder"] 
 //定义number数组
 let a3: Array<number> = [1, 2, 3] 
 let a4: number[] = [1, 2, 3] 
 let a5 = [1, 2, 3] // 也会⾃动推断为 number

(2)函数

在 uts 中,我们需要严格确定参数类型和返回值类型

typescript
function add(x :string, y :string) :string { 
 	return x + " " + y 
}

除⾮函数不需要返回任何东西,否则返回值类型是必需的

typescript
function log(x :string) {
	console.log(x) 
} 

// 当然你也可以设置 void,表⽰⽆返回值 
function log2(x :string): void { 
	console.log(x) 
}

在函数回调中也应该严格确定参数类型和返回值类型

typescript
let arr = ["Hydrogen", "Helium", "Lithium", "Beryllium"]; 

let a2 = arr.map(function (s: string): number { 
	return s.length; 
}); 

let a3 = arr.map((s: string): number => s.length);

(3)接口

有时候,我们可能需要对象类型

typescript
interface Item { 
	name: string,
	age: number 
} 

let item: Item = { name: '⼩明', age: 18 }

在uts中,由于interface的概念在kotlin和swift有其他⽤途,所以uts中推荐开发者把json转成type, ⽽不是interface

在 uts 类型别名的⼼智负担更⼩,优先使⽤类型别名

(4)类型别名

有时候,我们可能需要更加复杂的类型,这时可以通过type来定义

typescript
type Item = { 
	name: string,
	age: number 
} 

let item: Item = { 
	name: '⼩明',
	age: 18 
} 

// 我们也可以重命名类型 
type List = Array<string> 
type Age = number

在实际开发中,推荐的做法是类型别名的⾸字⺟⼤写,这可以让团队所有⼈都清楚它是类型

(5)联合类型

在类型别名的基础上,我们可以对相同类型做联合类型

typescript
type StatusCode = 404 | 200 | 500 
let statusCode: StatusCode = 404 

type Method = 'get' | 'post' 
let method: Method = 'get'

注意,对不同类型做联合类型是错误的,除了 null

typescript
type Method = 'get' | 1 // ❌ 'get' 和 1 不是相同的类型 
type StatusCode = 500 | 400 | null // ✅ null 是允许的

四、开发时类型和运行时类型

开发时类型,指为了在开发期间IDE可以更好的进⾏代码提⽰和校验

但在编译后这些类型会被擦除,变成运行时类型

typescript
type a = 302 | 404 | 500 // IDE 提⽰是开发时类型 
let a1 : a = 404 // 运⾏时类型是 number

五、 特殊值域类型

严格的特定限制,比如颜色字符串

很多数据,虽然类型是字符串,但其实有特殊的值域范围

⽐如ColorString,代表⼀个合法的颜色字符串

类型https://uniapp.dcloud.net.cn/uni-app-x/uts/data-type.html#ide-string

这个相对用的比较少,可以忽略