切换主题
一、类型声明基础
一、基础类型
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
这个相对用的比较少,可以忽略