TS是一个可选的静态的类型系统
需要在变量、函数的参数、函数的返回值后面加上: 类型
let num: number = 123;
let str: string = "abc";
let isTrue: boolean = true;
let arr1: number[] = [123, 234];
// 或
let arr2: Array<number> = [1, 2, 3];
function printValues(obj: object) {
const vals = Object.values(obj);
vals.forEach(v => console.log(v))
}
strictNullChecks: true
可以获得更严格的空类型检查,此后null和undefined只能赋值给自身 let name: string | undefined = undefined;
function printMenu() {
console.log("1. 登陆");
console.log("2. 注册");
}
function throwError(msg: string): never {
throw new Error(msg);
}
let a: "A";
let tuple: [string, number];
let data: any = "abcde";
let num: number = data;
对已知的一些类型定义名称,type 类型名 = ...
type Gender = "男" | "女"
type User = {
name: string
age: number
gender: Gender
}
let u: User = {
name: "张三",
age: "18",
gender: "男"
}
function getUsers(g: Gender): User[] {
return []
}
函数重载:在函数实现之前,对函数调用的多种情况进行声明
function combine(a: number, b: number): number;
function combine(a: string, b: string): string;
function combine(a: string | number, b: string | number): string | number {
if (typeof a === "string" && typeof b === "string") {
return a + b
} else if (typeof a === "number" && typeof b === "number") {
return a * b
} else {
throw new Error("a和b类型必须相同")
}
}
可选参数:可以在某些参数名后加上?
,表示该参数可以不用传递,可选参数必须在参数列表的末尾
function sum(a: number, b: number, c?: number) {
}
sum(3, 4)
sum(3, 4, 5)
用于解决类型别名 逻辑含义与真实含义相混淆的问题
定义枚举:
enum 枚举名 {
枚举字段1 = 值1,
枚举字段2 = 值2,
...
}
enum Gender {
male = '男',
female = '女',
}
枚举的规则:
用于约束类、对象、函数的标准
接口与类型别名一样,不出现在编译结果中
// 约束对象
interface User {
name: string
age: number
}
// 约束函数 - 对象中的函数
interface User {
name: string
age: number
sayHello1: () => void
sayHello2(): void
}
// 约束函数 - 直接约束
interface Condition {
(n: number): boolean
}
接口的继承
interface A {
T1: string
}
interface B extends A {
T2: number
}
interface C extends A, B {
T3: boolean;
}