跳转至

TypeScript 配置环境 & 初时Type变量

配置环境

类型名 示例 说明
number 1,2,3 数值
string 'Hello' 字符串
boolean true\false 布尔值
字面量 其本身 限制变量的值就是该字面量的值
any * 任何类型
unknown * 类型安全的any
vold 空值undefined 没有值(或undefined)
never 没有值 不能是任何值
object {'name':'Ts'} 任意的json对象
array [1, 2, 3] 任意json数组
tuple [4, 5] 元素,TS新增类型,固定长度的数组
enum enum{A, B} 枚举,TS中新增类型

TS类型

// 可以给变量设置类型,也可以给函数设置类型

// 变量其实也可以不声明,在赋值的时候会自动对变更进行类型检查
// a变量只能被设置为数值
let a: number; 
a = 10; 
// a变量只能被设置为数值
let b: boolean = true;
// 赋值为了布尔值,再赋值为其他类型就会收到提醒
let c = false;

// JS中本身是不考虑参数的类型和个数的
// 设定了参数类型,就只能传指定参数,否则编辑器会有提示
// 参数可以设置类型外,函数也可以设置返回值的类型
function sum(a: number, b: number): number {
    return a + b;
}
console.log(sum(123, 456))
// 可以直接使用字面量进行类型声明,类似常量
let a: 10;
// 赋值为其他数值就会报错
// a = 12;

// 可以设置多个指定类型或者值(联合类型)
let b: "male" | "female";
b = "male";
b = "female";

let c: boolean | string;
c = true;
c = "hello";

/************************************************** */
// any 表示任意类型,关闭当前变量的变量检测(尽量避免使用)
let d: any;
// let d; //只声明不指定类型,TS解析器会自动判断变量类型为any(隐式any)
d = 10;
d = "hello";
d = true;

/************************************************** */
// unknown 表示未知类型的值
let e: unknown;
e = 10;
e = "hello";
e = true;

/************************************************** */
// any 和 unknown 的区别
let f: string;
// 设置虽然 string 但赋予变量为 any 类型,导致变量 string 赋予了 boolean 值
f = d;
// 如果 string 要设置为 unknown 的变量就会对 unknown 最后一次赋予的值进行检测
// 如果类型不一致就会报错,这也是不推荐使用 any 的原因
// unknown 类型的变量不能直接赋值给其他变量

// 可以用类型判断来赋值,告诉TS这就是字符串,您可以安全赋值
if (typeof e === "string") {
    f = e;
}
// 类型断言(判断语言),同于上方if方法
f = e as string;
f = <string> e;

/************************************************** */
// void 表示为空,以函数为例,就表示没有返回值的函数
function fn(): void {
    return
}

// never 表示不会返回结果,什么都不会返回,抛出错误
function fn2(): never {
    throw new Error('报错了!')
}
// object 表示一个json对象
let a: object;
a = {};
a = function (){};

// {}表示 b 是一个对象,并且里面需要有一个name属性,并且值为字符串
// 语法:{属性名: 属性值, 属性名: 属性值}
// 加一个?为可选属性
let b: {name: string, age?: number};
b = {name: 'TS'};
b = {name: 'TS',age: 18};

// [propName: string]: any 表示任意类型的属性
let c: {name: string, [propName: string]: any};
c = {name: 'TS', a:1, b:2}

/**
 * 设置函数结构的类型声明:
 *      语法: (形象: 类型, 形象: 类型...)=> 返回值
 * 
 * 表示 d 我希望是一个函数,并且有两个参数,两个参数是number,返回值也是number
 */
let d: (a: number,b: number)=>number;
d = function (a, b): number {
    return a + b;
}

/************************************************** */
/**
 * 数组的类型声明:
 *      类型[]
 *      Array<类型>
 */
// string[] 表示字符串数组
let e: string[];
e = ['a', 'b', 'c']

// number[] 表示数值数组
let f: number[];

// 同上的声明方式
let g: Array<number>;
g = [1, 2, 3];

/************************************************** */
/**
 * 元组,固定长度的数组
 *      语法:[类型, 类型, 类型]
 */
// 表示这个元组有两个值,且都是string
let h: [string, string];
h = ['Hello', 'Ts'];

/************************************************** */
/**
 * enum 枚举
 */
// 设置一个枚举类
enum Gender {
    Male,
    Female 
}
let i: {name: string, gender: Gender}
i = {
    name: 'Ts',
    gender: Gender.Male
}
console.log(i.gender === Gender.Male)

/************************************************** */
// & 表示同时
let j: {name: string} & {age: number};
j = {name: 'Ts', age: 18};

// 类型的别名
type myType = 1 | 2 | 3 | 4 | 5;
let k: myType;
k = 5;