TypeScript类型声明

基本类型

  • 类型声明

    • 类型声明是TS非常重要的一个特点

    • 通过类型声明可以指定TS中变量(参数、形参)的类型

    • 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错

    • 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值,防止随意对变量任意类型的值

    • 语法:

      • let 变量: 类型;
        
        let 变量: 类型 = 值;
        
        function fn(参数: 类型, 参数: 类型): 类型{
            ...
        }
        
  • 自动类型判断

    • TS拥有自动的类型判断机制
    • 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
    • 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明
  • 类型:

    类型例子描述
    number 1, -33, 2.5 任意数字
    string 'hi', "hi", hi 任意字符串
    boolean true、false 布尔值true或false
    字面量 其本身 限制变量的值就是该字面量的值
    any * 任意类型
    unknown * 类型安全的any
    void 空值(undefined) 没有值(或undefined)
    never 没有值 不能是任何值
    object {name:'孙悟空'} 任意的JS对象
    array [1,2,3] 任意JS数组
    tuple [4,5] 元素,TS新增类型,固定长度数组
    enum enum{A, B} 枚举,TS中新增类型

示例:

复制代码
//#region  类型声明简单示例
 
//  声明一个变量a,同时指定它的类型为number
let a: number;

// a 的类型设置为了number,在以后的使用过程中a的值只能是数字
a = 10;
a = 33;
// a = 'hello'; // 此行代码会报错,因为变量a的类型是number,不能赋值字符串
let b: string;
b = 'hello';
// b = 123;

// 声明完变量直接进行赋值
// let c: boolean = false;
// 如果变量的声明和赋值是同时进行的,TS可以自动对变量进行类型检测
let c = false;
c = true;

 //#endregion

 //#region  
// JS中的函数是不考虑参数的类型和个数的
function sum1(a, b){
    return a + b;
}
sum1(2,"2");//可以成功调用的
// console.log(sum(123, 456)); // 579
// console.log(sum(123, "456")); // "123456"
// :number意味着返回的值必须是number
function sum(a: number, b: number): number{
    return a + b;
}

let result = sum(123, 456);//只能严格按照类型传参数

 //#endregion
复制代码

 

字面量

  • 也可以使用字面量去指定变量的类型,通过字面量可以确定变量的取值范围

示例:

复制代码
// 也可以直接使用字面量进行类型声明
let a1: 10;// 定义a1的值是10,不能再改,类似常量
a1 = 110;// 报错

// 可以使用 | 来连接多个类型(联合类型)
// 表示b可以是"male",也可以是"female"
let b: "male" | "female";
b = "male";
b = "female";

// 表示c可以是boolean,也可以是string
let c: boolean | string;
c = true;
c = 'hello';
复制代码

 

any

复制代码
// any 表示的是任意类型,一个变量设置类型为any后相当于对该变量关闭了TS的类型检测
// 使用TS时,不建议使用any类型
// let d: any;

// 声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any (隐式的any)
let d;
d = 10;
d = 'hello';
d = true;
复制代码

 

unknown

类型安全的any

示例:

复制代码
// unknown 表示未知类型的值
let e: unknown;
e = 10;
e = "hello";
e = true;

let s:string;

// d的类型是any,它可以赋值给任意变量
  s = d;// 正确

e = 'hello';
s=e;// 错误 unknown类型的变量,不能直接赋值给其他变量
// unknown 实际上就是一个类型安全的any
// unknown类型的变量,不能直接赋值给其他变量
if(typeof e === "string"){
    s = e;
}
复制代码

 enum 

复制代码
enum Color {
  Red,
  Green,
  Blue,
}
let c: Color = Color.Green;

enum Color {
  Red = 1,
  Green,
  Blue,
}
let c: Color = Color.Green;

enum Color {
  Red = 1,
  Green = 2,
  Blue = 4,
}
let c: Color = Color.Green;
复制代码

类型断言

有些情况下,变量的类型对于我们来说是很明确,但是TS编译器却并不清楚,此时,可以通过类型断言来告诉编译器变量的类型,断言有两种形式:

复制代码
// 类型断言,可以用来告诉解析器变量的实际类型
/*
* 语法:
*   变量 as 类型
*   <类型>变量
*
* */
// 第一种
s = e as string;
// 第二种
s = <string>e;
复制代码

  示例:

//第一种 
let someValue: unknown = "this is a string";
let strLength: number = (someValue as string).length;

//第二种 
let someValue: unknown = "this is a string";
let strLength: number = (<string>someValue).length;

 

posted @   安静点--  阅读(223)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
历史上的今天:
2021-11-24 jQuery自定义插件
2021-11-24 window.onload与 $(document).ready()区别
点击右上角即可分享
微信分享提示