TypeScript 数据类型

注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。


TypeScript 数据类型

数据类型指定了变量可以保存的数据种类。TypeScript 的一些主要数据类型如下所示。

数据类型 描述 示例
number 整数或浮点数数据。 3, 3.234, 3e-2, 等。
string 文本数据。 'hello', "hello world!", 等。
boolean 两个值中的任何一个:truefalse true, false
undefined 未被赋值的变量。 let firstName: string;
null 表示有意地缺少任何对象值。 let firstName = null;
数组 同一类型元素的列表。 let ages: number[] = [18, 23, 12];
Tuple 具有固定大小和已知数据类型的数组。 let details: [number, string] = [7, "hello"]
对象 数据的键值对集合。 let student = {name: "John"};
any 表示可以保存任何值的变量类型。 let anything: any = "Hello"; anything = 5;
unknown any 类似,但需要更多检查。 let notSure: unknown = 4;
void 用于不返回值的方法。 function sayHello(): void {...}
never 表示永不出现的值。 function error(): never {...}

TypeScript 原始类型与非原始类型

TypeScript 数据类型分为原始类型和非原始类型。

类型 描述 示例
原始类型 可以保存单个值的基本类型。 字符串、数字、布尔值、undefinednull
非原始类型 可以保存集合或更复杂的结构。 对象、数组、元组、枚举、anyvoidneverunknown

TypeScript Number

在 TypeScript 中,number 类型表示数值(整数和浮点数)。

  • 整数:没有小数部分的数值。示例:3, -74, 等。
  • 浮点数:有小数部分的数值。示例:3.15, -1.3, 等。
let integerNumber: number = -3; 
console.log(integerNumber); 

let floatNumber: number = 3.15; 
console.log(floatNumber); 

输出

-3
3.15

特殊数值

TypeScript 还包含特殊的数值。

TypeScript 包含可从某些算术运算中得出的独特数值。这些特殊值是 Infinity-InfinityNaN(非数字)。例如,

// Division by zero results in Infinity
let number1: number = 3 / 0;
console.log(number1); 

// Negative division by zero results in -Infinity
let number2: number = -3 / 0;
console.log(number2);  

// Non-numeric operations result in NaN
let number3: number = Number("abc") / 3;
console.log(number3);

输出

Infinity
-Infinity
NaN

TypeScript String

字符串表示文本数据。例如,"Programiz", "apple", 等。

在 TypeScript 中,字符串可以包含在单引号、双引号或反引号中。

  • 单引号: 'Hello'
  • 双引号: "Hello"
  • 反引号: `Hello`

我们使用 string 关键字声明一个变量为字符串。例如,

// String enclosed within single quotes
let language: string = 'English';
console.log(language);  

// String enclosed within double quotes
let country: string = "USA";
console.log(country);  

// String enclosed within backticks
let result: string = `fail`;
console.log(result);

输出

English
USA
fail

注意:在字符串中避免使用不匹配的引号(例如,以单引号开头并以双引号结尾)很重要,因为这会导致语法错误。例如,字符串 'hello""world' 会导致错误。

要了解更多关于字符串的信息,请访问 TypeScript Strings


TypeScript Boolean

布尔数据只能保存两个可能值之一:truefalse。我们使用 boolean 关键字声明一个变量为布尔类型。例如,

let dataChecked: boolean = true;
console.log(dataChecked);  // true

let valueCounted: boolean = false;
console.log(valueCounted);  // false

如果您想了解更多关于布尔值的信息,请访问 TypeScript Booleans


TypeScript undefined

在 TypeScript 中,undefined 数据类型表示一个未被赋值的变量。例如,

let item: undefined;
console.log(item);

// Output: undefined

在上例中,我们声明了 item 变量,但未给它赋值。因此,打印变量时会输出 undefined


TypeScript null

在 TypeScript 中,null 数据类型表示有意地缺少任何值。例如,

let user: null;

user = null;  // The user variable is explicitly set to null
console.log(user);

// Output: null

在这里,我们将 null 赋给了 user 变量,以表明它当前不应包含任何数据。

注意事项

  • undefined(可能表示变量尚未初始化)不同,null 用于表示有意识的非值。
  • 虽然 undefinednull 在 JavaScript 中可以互换使用,但 TypeScript 将它们视为不同的类型(除非另有配置)。

如果您想了解更多关于 nullundefined 的信息,请访问 TypeScript null and undefined


TypeScript Array

数组在一个变量中存储多个元素,并且可以包含任何类型的元素。例如,

// Create an array of numbers
let quantities: number[] = [1, 2, 3, 4, 5];
console.log(quantities);

// Output: [1, 2, 3, 4, 5]

在这里,我们将 quantities 声明为数字数组。

现在,让我们创建一个可以存储字符串的数组

let colors: string[] = ["red", "blue", "green", "yellow"];  
console.log(colors);

// Output: [ 'red', 'blue', 'green', 'yellow' ]

在这里,colors 是一个字符串数组。

要了解更多关于数组的信息,请访问 TypeScript Arrays


TypeScript Object

对象是一种数据类型,可以存储 **键值对** 的集合。这些对可以是其他数据类型,如数组、函数、字符串和数字。例如,

let person: { name: string; age: number; hobbies: string[] } = {
    name: "John",
    age: 30,
    hobbies: ["reading", "cycling"]
};

console.log(person);

输出

{ name: 'John', age: 30, hobbies: [ 'reading', 'cycling' ] }

在上例中,person 对象包含以下键值对:

name "John"
age 30
hobbies ["reading", "cycling"]

如果您想了解更多关于对象的信息,可以访问 TypeScript Objects


TypeScript Tuple

TypeScript 中的元组是一种数组,其中每个元素都有一个特定、预定义的类型。例如,

// A tuple with a string and a number
let user: [string, number] = ["John", 30];
console.log(user);

// Output: [ 'John', 30 ]

在上例中,我们声明了一个名为 user 的元组,其中:

  • 第一个元素必须是字符串。
  • 第二个元素必须是数字。

要了解更多关于元组的信息,请访问 TypeScript Tuples


TypeScript any

在 TypeScript 中,any 类型允许变量在没有严格类型检查的情况下保存任何类型的值。例如,

// Initially, TypeScript interprets the anything variable as a string
let anything: any = "I can be anything!";
console.log(anything);

// Now it's a number
anything = 42;
console.log(anything);

// Now it's a boolean
anything = false;
console.log(anything);

输出

I can be anything!
42
false

在上例中,变量 anything

  • 开始时是字符串,
  • 然后变为数字,
  • 最后变为布尔值。

any 类型非常灵活,但安全性较低,因为它绕过了 TypeScript 的类型安全功能。

要了解更多关于 any 的信息,请访问 TypeScript any


TypeScript unknown

在 TypeScript 中,unknown 类型与 any 类似,但更安全,因为它要求您在对这些值执行操作之前执行某种类型的检查。

let value: unknown = "Hello, TypeScript"; // Value is unknown

// Direct operations on 'unknown' type are not allowed
// console.log(value.toUpperCase()); // Error: Object is of type 'unknown'.

// Correct usage requires type checking
if (typeof value === "string") {
    console.log(value.toUpperCase()); 
}

在示例中,我们从一个类型为 unknown 的变量 value 开始,这意味着 TypeScript 尚不知道它保存的数据类型。

因此,在使用 value 之前,我们会检查它是否为字符串,以便对其执行字符串操作。如果我们不这样做,就会出错。


TypeScript void

在 TypeScript 中,void 类型表示一个函数不返回值。例如,

function logMessage(): void {
    console.log("This function returns nothing.");
}

logMessage();

// Output: This function returns nothing.

在此示例中,logMessage() 函数的返回类型声明为 void,明确表示它不返回任何值。

这对于主要目的是执行副作用(如显示消息或写入日志)的函数特别有用。

要了解更多关于 void 的信息,请访问 TypeScript void


TypeScript never

在 TypeScript 中,never 类型表示永不发生的值。它通常用于表示从不返回值的 函数,通常是因为它们会抛出异常。例如,

// This function never returns
function throwError(message: string): never {
    throw new Error(message);
}

try {
    // Call the function
    throwError("Something went wrong!");
}
catch (error) {
    // Print the error message
    console.log((error as Error).message);
}

// Output: Something went wrong!

在这里,在 throwError() 函数中,never 表示该函数将始终抛出错误,而不会正常完成。

要了解更多关于 never 的信息,请访问 TypeScript never


TypeScript 中 JavaScript 没有的类型

TypeScript 中 JavaScript 没有的类型

以下类型并非 JavaScript 的原生类型,而是由 TypeScript 添加的。

  • tuple
  • never
  • unknown
  • void
你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战