TypeScript语法-- 2. 数据类型(boolean,number,string,array,tuple,enum,any,unknown,void,undefined,null,never)

本文详细介绍了 TypeScript 中的各种数据类型,包括基本类型如布尔型、数值型、字符串型,复杂类型如数组、元组、枚举,以及特殊类型如 any 和 unknown 的使用方式和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TypeScript系列文章

可浏览博客主页的TypeScript专栏,会陆续添加相关文章,有问题或者可以优化的地方也希望大大门告知
共同进步 :)

在这里插入图片描述



TypeScript 数据类型

版本 Version 4.8.4

TypeScript 数据类型:为了让程序有价值,我们需要能够处理最简单的数据单元:数字,字符串,结构体,布尔值等。 TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举类型方便我们使用。


0 字面量类型

let a:1;
a=1;
// error!~
a=2;

1 布尔型-boolean

var isDone: boolean = false;

2 数值-number

// 10进制
let decLiteral: number = 6;
// 16进制
let hexLiteral: number = 0xf00d;
// 2进制
let binaryLiteral: number = 0b1010;
// 8进制
let octalLiteral: number = 0o744;

3 字符串-string

let name: string = "bob";

4 数组(可限制类型)

// 数组泛型 
let list: Array<any> = [1, true, "free"];
// 元素类型后面接上 []
let list2: any[] = [1, true, "free"];

5 元组

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。

// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
// x = [10, 'hello']; // Error
// 当访问一个越界的元素,vscode编辑器会提示错误 例如:console.log(x[5]);

6 枚举

// 编号默认从0开始
// 也可以手动赋值
// 如果当前枚举值没有赋值,上一个必须为数值类型,当前枚举值会自动+1
enum Color {
  Red = 2,
  Green = 1,
  Blue,  // 根据上一个枚举值自动加1
  Yellow="111", // 可以赋值为字符串
  Black="5" //必须赋值,不然会报错
}
let c: Color = Color.Blue;
console.log("Color.Red:",Color.Red);
console.log("Color.Green:",Color.Green);
console.log("Color.Blue:",Color.Blue);
console.log("Color.Yellow:",Color.Yellow);
console.log("Color.Black:",Color.Black);

7 any和unknown

// any 跟 unknown 都表示任何类型,可以相互赋值~
// 有些教程说不可以,这个也要看TS版本
// any 表示任何,对于那些不确定类型的值可以用,对现有代码进行改进也可以用,但是避免使用,不然还不如用JS写
var a: any = "hello";
var b: unknown = 123;
b = a;
a = b;

那any和unknown之间有什么区别呢?

let a:any='hello';
let b:unknown='hello';

let str:string;
str=a;

// error!!! unknown 不能直接给其他变量赋值
str=b;

// unknown 是安全的任意类型,因为他不能直接给其他变量赋值
// 需要经过判断数据类型或者通过断言的方式
if(typeof b == 'string'){
    str=b;
}
str=b as string;
str=<string>b;

当你没有指定类型,并且 TypeScript 不能从上下文推断它时,编译器通常会默认为 any。

不过,你通常希望避免这种情况,因为 any 没有经过类型检查。 使用编译器标志 noImplicitAny 将任何隐式 any 标记为错误。

8 undefined和null

// undefined和null两者各自有自己的类型分别叫做undefined和null
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;

9 void和never

void 常用于函数返回值

let unusable:void = undefined;

// 无返回值
function fn():void{
    return;
}
// 返回undefined
function fn2():void{
    return undefined;
}

never类型表示的是那些永不存在的值的类型。

// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
  throw new Error(message);
}

// 推断的返回值类型为never
function fail() {
  return new Error("Something failed");
}

// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
  while (true) {}
}

// never 是任何类型的子类型,也就是说 never 可以赋值给任何类型。
const aa: number = "string" as never;
const bb: object = "" as never;
// console.log('const aa: number = "111" as never:', aa); // Success

10 object

用于设置对象的类型声明。
如果用来声明变量的类型,那就有点毫无意义,但是可以拓展开来。
可以用[propName:string]:any 表示其他属性

let person:{name:string,age?:number};
person={name:'penk',age:31}

// 如果不确定属性名可以用[propName:string]:any 表示其他属性
let person2:{name:string,[propName:string]:any};
person2={name:'penk',sex:'man'}

11 Function

用于设置函数的类型声明。
可以拓展开来,一般用于函数表达式。
限制参数类型、参数数量以及返回值类型。

// 参数a为number类型、参数b为number类型,返回类型是number类型
let add:(a:number,b:number)=>number;
add = (a:number,b:number)=>{
   return a+b;
}

TypeScript 类型断言

通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。
注意:类型断言只能够「欺骗」TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误

// “尖括号”语法
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

// as 语法
let someValue2: any = "this is a string";
let strLength2: number = (someValue as string).length;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Penk是个码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值