【TypeScript】基础类型

2024-01-08 20:45:14


包含如下基础类型:

  • 布尔类型(boolean)

  • 数字类型(number)

  • 字符串类型(string)

  • 数组类型(array)

  • 元祖类型(tuple)

  • 枚举类型(enum)

  • 任意类型(any)

  • void 类型

  • null 和 undefined

  • never 类型

  • object 类型

1、布尔类型

let isDone: boolean = false;

2、数字类型

支持二进制、八进制、十进制、十六进制字面量

let decLiteral: number = 6; // 十进制
let hexLiteral: number = 0xf00d; // 十六进制
let binaryLiteral: number = 0b1010; // 二进制
let octalLiteral: number = 0o744; // 八进制

3、字符串类型

和JavaScript一样,可以使用双引号( ")或单引号(')表示字符串

let name: string = "bob";

模版字符串(`),可以定义多行文本和内嵌表达式,以 ${ expr }这种形式嵌入表达式

let name: string = `Gene`;
let sentence: string = `Hello, my name is ${ name }`;

4、数组类型

两种方式定义数组:

  1. 可以在元素类型后面接上 []
let list: number[] = [1, 2, 3];
  1. 使用数组泛型,Array<元素类型>:
let list Array<number> = [1, 2, 3];

5、元祖 Tuple

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

let x: [string, number];
x = ['hello', 10] // OK
x = [10, 'hello'] // Error

当访问一个已知索引的元素,会得到正确的类型

 console.log(x[0].substr(1)); // OK
 console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'

6、枚举类型

使用枚举我们可以定义一些带名字的常量。 使用枚举可以清晰地表达意图或创建一组有区别的用例

6.1 数字枚举

如下,定义了一个数字枚举, Up使用初始化为 1。 其余的成员会从 1开始自动增长

enum Direction {
    Up = 1,
    Down,
    Left,
    Right
}

使用枚举:

const d: Direction = Direction.Up;
console.log(d)

默认情况下,从0开始为元素编号

enum Color {
     Red, 
     Green,
     Blue
 }
 let c: Color = Color.Red;
 console.log(c); // 0

也可以手动的指定成员的数值

enum Color {
    Red = 1, 
    Green, 
    Blue
}
let c: Color = Color.Green;
console.log(c); // 2

或者,全部都采用手动赋值:

enum Color {
    Red = 1, 
    Green = 12, 
    Blue = 4
}
let c: Color = Color.Green;
console.log(c); // 12

枚举类型提供的一个便利是你可以由枚举的值得到它的名字。
例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字:

 enum Color {
     Red = 1,
     Green, 
     Blue
 }
 let colorName: string = Color[2];
 console.log(colorName);  // 显示'Green'因为上面代码里它的值是2

6.2 字符串枚举

在一个字符串枚举里,每个成员都必须用字符串字面量,或另外一个字符串枚举成员进行初始化。

enum Direction {
    Up = "UP",
    Down = "DOWN",
    Left = "LEFT",
    Right = "RIGHT",
}

6.3 反向映射

从枚举值到枚举名字

enum Enum {
    A
}
let a = Enum.A;
let nameOfA = Enum[a]; // "A"

要注意的是 不会为字符串枚举成员生成反向映射。

7、Any 类型

有时候,我们会想要为那些在编程阶段还不清楚类型的变量指定一个类型。 这些值可能来自于动态的内容,比如来自用户输入或第三方代码库。 这种情况下,我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用 any类型来标记这些

 let notSure: any = 4;
 notSure = "maybe a string instead";
 notSure = false;

当你只知道一部分数据的类型时,any类型也是有用的。
比如,你有一个数组,它包含了不同的类型的数据:

let list: any[] = [1, true, "free"];
list[1] = 100;

8、Void

某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。 当一个函数没有返回值时,你通常会见到其返回值类型是 void

function warnUser(): void {
    console.log("This is my warning message");
}

9、Null 和 Undefined

void相似,它们的本身的类型用处不是很大:

// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;

10、Never

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

例如, never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型

下面是一些返回never类型的函数:

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

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

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

11、Object 类型

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型

使用object类型,就可以更好的表示像Object.create这样的API。例如:

declare function create(o: object | null): void;

create({ prop: 0 }); // OK
create(null); // OK

create(42); // Error
create("string"); // Error
create(false); // Error
create(undefined); // Error

- 类型断言

  • 类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”
  • 它没有运行时的影响,只是在编译阶段起作用

类型断言有两种形式:
“尖括号”语法:

let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;

另一个为as语法:

let someValue: any = "this is a string";
let strLength: number = (someValue as string).length;

文章来源:https://blog.csdn.net/zhenshu_guo/article/details/135378996
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。