使用 TypeScript 开发时,有时会要处理一些结构比较灵活的数据,比如从服务器返回的数据,这些数据包含动态生成的键名。
收到 JSON 响应如下
{
"responses": {
"accepted": [],
"declined": [],
"messages": {
"id1": { "profile": "", "message": "test message1" },
"id2": { "profile": "", "message": "test message2" }
}
}
}
messages
对象中的键(id1
, id2
)是动态变化的,每个键对应的值都是具有固定格式的对象。
定义类型
interface Message {
profile: string;
message: string;
}
interface Response {
accepted: string[];
declined: string[];
messages: Record<string, Message>;
}
使用示例
const response: Response = {
accepted: ["id3"],
declined: ["id4"],
messages: {
id1: { profile: "User1", message: "Hello, world!" },
id2: { profile: "User2", message: "TypeScript is great!" }
}
};
// 输出测试
console.log(response.messages.id1.message); // 输出: "Hello, world!"
使用 Record<K, T>
可以方便地定义那些键不确定但值有固定类型的对象。