有 as const的情况:
const formFields = {
level: 'level',
deadline: 'deadline',
title: 'title',
content: 'content',
users: 'users',
} as const;
使用 `as const`后,TypeScript 会推断出这个对象的每个属性都是**只读的(readonly)**,并且每个属性的值都是具体的字面量值(如 `'level'`而不是 `string`)。
类型推断结果为:
{
readonly level: "level";
readonly deadline: "deadline";
readonly title: "title";
readonly content: "content";
readonly users: "users";
}
这样,在定义 `FormFields`类型时,`[formFields.level]`等索引类型访问会得到确切的字面量类型(如 `"level"`),从而确保类型定义的一致性。
没有 as const的情况:
const formFields = {
level: 'level',
deadline: 'deadline',
title: 'title',
content: 'content',
users: 'users',
};
没有 `as const`,TypeScript 会推断出每个属性的类型为 `string`(因为默认情况下 TypeScript 会推断出最通用的类型)。
类型推断结果为:
{
level: string;
deadline: string;
title: string;
content: string;
users: string;
}