TypeScript - 基本类型 <3>

如何进行类型约束

仅需在变量、函数的参数、返回值位置加上:类型
ts 在很多场景中可以完成类型推导
any:表示任意类型,对该类型,ts 不进行类型检查

let num: number;
let name: string = "zl";

// function add(a: number, b: number): number {
//     return a + b;
// }

function add(a: number, b: number) {
    return a + b;
}

// 自动推导
num = add(2, 3);

源代码和编译结果的差异:只是少了类型约束
编译结果中不会有类型约束,也再一次验证了运行过程中是不会有 ts 代码的
ts 代码是静态的:当 ts 代码中有错误的时候,是不会通过编译的。

在这里插入图片描述

基本类型

  • number: 数字
  • string:字符串
  • boolean:布尔
  • 数组
  • object:对象
  • null 和 undefined

null 和 undefined 是所有其它类型的子类型,它们可以赋值给其它类型。
约束为数组类型时,必须指定数组的类型,否则会变成字面量类型。

// 数组
let nums: number[] = [1, 2, 3];
let numa: Array<number> = [1, 2, 3];

// 对象
let obj: object = {
    age: 13,
    name: "zl"
}

let n: string = undefined;
let b: number = null;

null 和 undefined 的可以任意赋值,会造成代码紊乱,可以通过配置中更严格的空类型检查"strictNullChecks": true解决,这样 null 和 undefined 就只能赋值给自身了。

在这里插入图片描述
在这里插入图片描述

其它常用类型

  • 联合类型
  • void 类型
  • never 类型
  • 字面量类型
  • 元祖类型(Tuple)
  • any 类型

联合类型

多种类型任选其一

当一个变量值会有多种类型可能的时候,可以使用联合类型,但此时使用变量时的智能提示会消失,因为此时 ts 并不能知道该作哪种类型下的提示。

配合类型保护进行判断

类型保护:当对某个变量进行类型判断之后,在判断的语句块中便可以确定它的确切类型,typeof 可以做关于基本类型的类型保护。

// 联合类型
let abj: string | undefined;
// 类型保护
if(typeof abj === "string") {
    
}

void
通常用于约束函数的返回值,表示该函数没有任何返回。


function active(): void {
    console.log("Hello world");
}

never
通常用于约束函数的返回值,表示该函数永远不可能结束。


function neverStop(): never {
    while(true) {
        // ...
    }
}

字面量
使用一个值进行约束,可以约束对象

// a 的取值只能是字符串A
let a: "A";

// 联合类型 + 字面量类型
let gender: "男" | "女";

// arr 永远只能取值为一个空数组
// 注意:这不是在定义一个数组类型,数组类型一定要加上类型
let arr: [];

// user 对象只能有且一定要有 name 和 age 两个属性,且属性类型固定
let user: {
    name: string,
    age: number
}

user = {
    name: "zl",
    age: 14
}

元祖
一个固定长度的数组,并且数组中的每一项的类型确定

let tu: [number, string];

// 那 tu 只能是包含一个数字和一个字符串的数组
tu = [12, "12"];

any
any 类型可以绕过类型检查,因此,any 类型的数据可以赋值给任意类型

let aa: any = "adf";
let bb: number = aa;

类型别名

对已知的一些类型定义名称,定义方式:type 类型名 = ...

在这里插入图片描述

函数的相关约束

函数重载
在函数实现之前,对函数调用的多种情况进行声明。

// 函数重载
// 函数调用只能传同为 number 或同为 string
function combina(a: number, b: number): number;
function combina(a: string, b: string): string;
function combina(a: number | string, b: number | string): number | string {
    if(typeof a === "number" && typeof b === "number") {
        return a * b;
    }else if(typeof a === "string" && typeof b === "string") {
        return a + b;
    }
    throw new Error();
}

combina(1, 1);

可选参数
可以在某些参数名后加上问号,表示该参数可以不用传递,此时该参数类型会变成 原类型 | undefined,可选参数必须在参数列表的末尾。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值