在 TypeScript 中,类型名称的大小写非常重要,因为 TypeScript 是区分大小写的语言。
1. Array
类型:可以小写吗?
(1) Array<T>
Array<T>
是 TypeScript 中的泛型类型,用于表示数组。Array
必须大写,因为它是 TypeScript 内置的全局类型。
示例
let numbers: Array<number> = [1, 2, 3]; // 正确
let strings: Array<string> = ["a", "b", "c"]; // 正确
(2) number[]
(小写形式)
- TypeScript 提供了一种更简洁的语法来表示数组类型,即使用
T[]
的形式。 - 这是
Array<T>
的等价形式,推荐在大多数情况下使用。
示例
let numbers: number[] = [1, 2, 3]; // 正确
let strings: string[] = ["a", "b", "c"]; // 正确
总结
Array<T>
和T[]
是等价的,功能完全相同。- 推荐使用
T[]
,因为它更简洁且更符合惯用法。
2. 其他类型的大小写区别
TypeScript 中的类型名称分为以下几类:
(1) 内置基本类型
这些类型是 TypeScript 的关键字,必须使用小写:
string
number
boolean
null
undefined
symbol
bigint
void
never
any
unknown
示例
let name: string = "Alice"; // 正确
let age: number = 30; // 正确
let isEnabled: boolean = true; // 正确
注意:如果使用大写(如 String
或 Number
),它们实际上是指 JavaScript 的包装对象类型(String
, Number
等),而不是 TypeScript 的原始类型。
错误示例
let name: String = "Alice"; // 不推荐,这是 JavaScript 的包装对象类型
let age: Number = 30; // 不推荐,这是 JavaScript 的包装对象类型
(2) 接口和类型别名
接口(interface
)和类型别名(type
)通常是用户定义的类型,命名时通常使用 PascalCase(首字母大写)。
示例
interface User {
name: string;
age: number;
}
type Point = {
x: number;
y: number;
};
let user: User = { name: "Alice", age: 30 }; // 正确
let point: Point = { x: 10, y: 20 }; // 正确
(3) 类
类(class
)也是用户定义的类型,命名时通常使用 PascalCase。
示例
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
let person: Person = new Person("Alice", 30); // 正确
(4) 联合类型和交叉类型
联合类型(|
)和交叉类型(&
)可以组合多个类型,大小写取决于所使用的具体类型。
示例
let id: string | number = 123; // 联合类型
let coordinates: { x: number } & { y: number } = { x: 10, y: 20 }; // 交叉类型
(5) 内置高级类型
一些内置的高级类型(如 Promise
、Readonly
、Partial
等)必须大写,因为它们是 TypeScript 的构造器类型或工具类型。
示例
let promise: Promise<number> = Promise.resolve(42); // 正确
let readonlyUser: Readonly<User> = { name: "Alice", age: 30 }; // 正确
3. 为什么大小写重要?
(1) 区分原始类型和包装对象类型
- 小写的
string
是 TypeScript 的原始类型。 - 大写的
String
是 JavaScript 的包装对象类型。
区别
let str: string = "hello"; // 原始类型
let objStr: String = new String("hello"); // 包装对象类型
console.log(typeof str); // 输出 "string"
console.log(typeof objStr); // 输出 "object"
推荐:尽量使用小写的原始类型(如 string
、number
),避免使用包装对象类型(如 String
、Number
)。
(2) 遵循命名约定
- 使用 PascalCase 定义接口、类型别名和类,便于区分自定义类型和内置类型。
- 使用小写表示内置的基本类型,保持一致性。
4. 总结
Array<T>
和T[]
:Array<T>
必须大写。T[]
是小写形式,推荐使用。
- 内置基本类型:必须小写(如
string
、number
)。 - 接口和类型别名:推荐使用 PascalCase(如
User
,Point
)。 - 类:推荐使用 PascalCase(如
Person
)。 - 高级类型:必须大写(如
Promise
、Readonly
)。