首页 > 其他分享 >TypeScript类型声明

TypeScript类型声明

时间:2022-11-24 22:22:18浏览次数:32  
标签:TypeScript 变量 number TS let 类型 声明 any

基本类型

  • 类型声明

    • 类型声明是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;

 

标签:TypeScript,变量,number,TS,let,类型,声明,any
From: https://www.cnblogs.com/anjingdian/p/16923614.html

相关文章

  • 基于注解方式声明切面(AOP)
    基础知识:【首先启动对@AspectJ注解的支持(蓝色部分):<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org......
  • MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件
    MySQL数据库——字符编码、配置文件、存储引擎、数据类型、约束条件一、字符编码与配置文件1、查看MySQL相关信息\s查看相关信息 当前用户、版本、编码、端口号 MySQ......
  • 时间序列 工具库学习(18)adtk模块-异常类型
    1.异常类型异常是一个广义的概念,它可以指代时间序列中许多不同类型的事件。根据具体情况,价值飙升、波动性转变、违反季节性模式等都可能是异常的或正常的。ADTK提供了一组......
  • 小程序 XQTypeScriptFramework 使用
    说明XQTypeScriptFramework隶属于XQFramework下JS基础性框架部分XQFramework励志将开发将常用开发语言基础性框架统一汇总,为全站开发使用到的基础语法进行统一,拜......
  • 类型转换
    运算时不同的数据类型转化为同一数据类型再运算。内存溢出问题:超过数据类型的最大容量。inta=10_0000_0000;intb=20;longc=a*(long)b;Sy......
  • 根据给定的三条边判断是否能构成三角形,并且输出它对应的面积和三角形类型
    1题目功能:判断三角形的类型描述:根据给定的三条边判断是否能构成三角形,并且输出它对应的面积和三角形类型2思路从键盘中输入三条边后,只需判断这三条边中任意两边之......
  • java 数据类型
    java属于强类型语言,要求变量必须符合规定,变量必须先定义在使用。java数据类型分为两大类:基本数据类型和引用数据类型。整数拓展:二进制0b八进制0十六进制0x浮点数拓......
  • 检查浏览器类型
    varbrowser={versions:function(){varu=navigator.userAgent,app=navigator.appVersion;return{//移动终端浏览器版本信息trident:u.indexOf('Trident......
  • 【解决了一个小问题】es query返回数据中, int64类型精度丢失的问题
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯首先定义了一个简单的结构体来接收esquery返回的数据://E......
  • 接口类型太多了,很多网工总是分不清
    交换机光模块的最强科普以太网交换机常用的光模块有四个,分别是SFP(SmallForm-factorPluggabletransceiver)小封装可插拔收发器,GBIC(GigaBitInterfaceConverter)千兆以太网......