ArkTS-Record详解
Record 基本认识
- 泛型Record<K, V>用于将类型(键类型)的属性映射到另一个类型(值类型)。常用对象字面量来初始化该类型的值:
let map: Record<string, number> = {
'John': 25,
'Mary': 21,
}
map['John']; // 25
- 类型K可以是字符串类型或数值类型,而V可以是任何类型。
interface PersonInfo {
age: number
salary: number
}
let map: Record<string, PersonInfo> = {
'John': { age: 25, salary: 10},
'Mary': { age: 21, salary: 20}
}
Record 的特点
灵活的键类型和值类型
- 键可以是任何类型,如字符串、数字、符号等。
- 值也可以是任何类型,包括原始类型、对象类型、函数类型等。
可以用于类型约束
- 在函数参数或变量声明中,可以使用Record来约束对象的结构。
可扩展性
- 可以通过扩展Record类型来添加更多的键值对。
Record 的案例
- 创建一个表示用户信息的对象类型
type UserInfo = Record<string, string | number>;
const user: UserInfo = {
'name': 'Alice',
'age': 30,
'email': 'alice@example.com',
};
- 定义一个函数,接受一个特定结构的 Record 类型参数
type OptionRecord = Record<'option1' | 'option2' | 'option3', boolean>;
function processOptions(options: OptionRecord) {
if (options.option1) {
console.log('Option 1 is enabled.');
}
if (options.option2) {
console.log('Option 2 is enabled.');
}
if (options.option3) {
console.log('Option 3 is enabled.');
}
}
const myOptions: OptionRecord = {
'option1': true,
'option2': false,
'option3': true,
};
processOptions(myOptions);
在这个案例中,函数processOptions接受一个特定结构的Record类型参数,其中键只能是'option1'、'option2'和'option3',值为布尔类型。
- 扩展 Record 类型
type BaseRecord = Record<'key1' | 'key2', string>;
type ExtendedRecord = BaseRecord | Record<'key3', number>;
const extendedObj: ExtendedRecord = {
'key1': 'value1',
'key2': 'value2',
'key3': 123,
};
- Record 与联合类型结合
type ActionType = 'login' | 'logout' | 'create' | 'update';
type ActionValue = string | number | boolean;
type UserActions = Record<ActionType, ActionValue>;
const actions: UserActions = {
'login': '2024-10-16 08:00',
'logout': false,
'create': 1234,
'update': 'new data',
};
- Record 与函数类型结合
type EventHandler = () => void;
type EventMap = Record<'click' | 'hover' | 'submit', EventHandler>;
const eventHandlers: EventMap = {
'click': () => console.log('Clicked!'),
'hover': () => console.log('Hovered!'),
'submit': () => console.log('Submitted!'),
};
在这个案例中,首先定义了一个基础的Record类型BaseRecord,然后通过与另一个Record类型合并,扩展了它的结构。 总的来说,Record在 ArkTS 中是一个非常有用的工具,可以帮助你更灵活地定义和约束对象类型。