注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。
TypeScript 数据类型
数据类型指定了变量可以保存的数据种类。TypeScript 的一些主要数据类型如下所示。
数据类型 | 描述 | 示例 |
---|---|---|
number |
整数或浮点数数据。 | 3, 3.234, 3e-2, 等。 |
string |
文本数据。 | 'hello' , "hello world!" , 等。 |
boolean |
两个值中的任何一个:true 或 false 。 |
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 数据类型分为原始类型和非原始类型。
类型 | 描述 | 示例 |
---|---|---|
原始类型 | 可以保存单个值的基本类型。 | 字符串、数字、布尔值、undefined 、null 。 |
非原始类型 | 可以保存集合或更复杂的结构。 | 对象、数组、元组、枚举、any 、void 、never 、unknown 。 |
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 包含可从某些算术运算中得出的独特数值。这些特殊值是 Infinity
、-Infinity
和 NaN
(非数字)。例如,
// 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
布尔数据只能保存两个可能值之一:true
或 false
。我们使用 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
用于表示有意识的非值。 - 虽然
undefined
和null
在 JavaScript 中可以互换使用,但 TypeScript 将它们视为不同的类型(除非另有配置)。
如果您想了解更多关于 null
和 undefined
的信息,请访问 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 没有的类型
以下类型并非 JavaScript 的原生类型,而是由 TypeScript 添加的。
tuple
never
unknown
void