?TypeScript类型:
类型 | 例子 | 描述 | number | 1,-33,2.5 | 任意数字 | string | 'hi' | 任意字符串 | boolean | true、false | 布尔值true或false | 字面量 | 其本身 | 限制变量的值就是字面量的值 | any | * | 任意类型 | unknow | * | 类型安全的any | void | 空值(undefined) | 没有值(或undefined) | never | 没有值 | 不能是任何值 | object | {name:"孙悟空"} | 任意的js对象 | array | [1,2,3] | 任意的js数组 | tuple | [4,5] | 元素,TS新增类型,固定长度数组 | enum | enum{A,B} | 枚举,TS新增类型 |
number string boolean ang 类型
let num:number = 0
let str:string = "word"
let flag:boolean = true
let res:any = num || str || flag //可以是任意类型
/* 字面量 也就是用字面量进行类型声明 */
let a : 10
a = 10 // a = 20报错 字面量有点类似 const
/* 我们也可以这么使用 */
let b : "aa" | "bb" //用 | 线来连接多个类型
b = "aa"
b = "bb"
let c : boolean | string
c = false
c = "str" //这些都是字面量的写法
any和unknow的区别
let res:any = 100
let ref:unknown = 100
let str:string;
str = res
/*
我们打印str = 100
因为res的类型是 any 所以赋值给 string 类型的 str 不会报错
这里我们会发现 any 赋值避开了 类型检查 所以不建议用 any
尽量去使用unknow
*/
//str = ref
/*
str = ref //这里会报错
因为ref的类型是 unknown 但是 str 的类型是 any 所以会报错
*/
if (typeof ref ==="string") { // 第一种写法
str = ref //如果想赋值我们可以先确定类型再去赋值 就不会报错
}
str = ref as string //第二种写法 类型断言 可以用来告诉解析器变量的实际类型
str = <string> ref
/*
* 语法:
* 变量 as 类型
* <类型> 变量
* 当你定义一个变量的时候 能用unknown 尽量不要用 any
*/
?void 类型和 never
/*
void 就是没有值 或 空值
在ts中如果函数有返回值 我们需要给函数的返回值定义类型 例如fn
如果没有返回值 我们就需要写 void 表示函数没有返回值 例如fn1
*/
function fn():string{
return "小米"
}
function fn1():void{
console.log("小米");
}
/*
never 就是没有值
js中没有值的情况 我们可以抛出一个错误
never 很少用到 我们了解一下即可
*/
function fn2():never{
throw new Error("错误");
}
?Object 类型、?Array 、?tuple 、?enum
//对象
let a: object; //这么写没有任何意义 因为js万物皆对象
let b: { name: string, age?: 18 }
b = { name: "小米" }
/*
如果 b 定义了 age 属性 但是 b 不写 age 属性会报错
所以我们需要在 age 后面加一个 ? 来表示 age 是可选的
*/
let c: { name: string, [propName: string]: any }
/*
propName 这里指的是属性名 命名无所谓 也可以用 xxx 代替 propName
propName: string 这里的 string 指的是对象属性名为 string类型
:any 这里指的是 对象的值可以为任意类型 也可定义为 number ,
如果定义 number 则对象除了 name 之外的值全部为 number 属性
*/
c = { name: "xiaomi", age: 18, gender: "男" }
//例如 :
let d: { name: string, [propName: string]: number | string | boolean }
d = { name: "xiaomi", age: 18, gender: "男", flag: false }
/*
设置函数结构类型声明
语法:(形参:类型,形参:类型,...)=> 返回值
*/
let fn: (a: number, b: number) => number
fn = function (a: number, b: number): number {
return a + b
}
//数组
let e: string[]
e = ["1", "2", "3"]
let f: Array<number>
f = [1, 2, 3]
// 元组
let g: [string, number]
g = ["a", 1]
// 枚举
// 枚举的默认值从 0 开始
enum Gender { male, female }
console.log(Gender); //打印结果 { '0': 'male', '1': 'female', male: 0, female: 1 }
/*
在开发过程中 我们如果给后端传 男 或者 传 女 一般都用 0 或者 1 表示
下面是枚举的一个用法
*/
let i: {name:string , gender:Gender}
i = {
name:"孙悟空",
gender:Gender.male
}
console.log(i); //打印结果 { name: '孙悟空', gender: 0 }
enum User { a = "小红", b = "小明" }
console.log(User);//打印结果 { a: '小红', b: '小明' }
|