micro
问题是当您将数组分配给常量时,您的数组没有等fontSizes
,但该常量的类型需要它。
Object.assign
通常用于构建类似的东西(但请继续阅读,我会尝试第三种选择,我认为这可能是最好的):
interface FontSizeAliases {
micro: number;
small: number;
default: number;
large: number;
}
const rawSizes = [12, 14, 16, 18, 22, 30, 40];
const fontSizes: number[] & FontSizeAliases = Object.assign(rawSizes, {
micro: rawSizes[0],
small: rawSizes[1],
default: rawSizes[2],
large: rawSizes[3],
});
游乐场链接
另一种选择是将它们构建在一个Partial<FontSizeAliases>
:
interface FontSizeAliases {
micro: number;
small: number;
default: number;
large: number;
}
const rawSizes: number[] & Partial<FontSizeAliases> = [12, 14, 16, 18, 22, 30, 40];
rawSizes.micro = rawSizes[0];
rawSizes.small = rawSizes[1];
rawSizes.default = rawSizes[2];
rawSizes.large = rawSizes[3];
const fontSizes = rawSizes as number[] & FontSizeAliases;
游乐场链接
但是,在这两种情况下,您都可能会错过其中一种尺寸(small
例如 )。要解决这个问题,您可以使用完整的类型检查单独创建大小,然后将它们组合起来:
interface FontSizeAliases {
micro: number;
small: number;
default: number;
large: number;
}
const rawSizes = [12, 14, 16, 18, 22, 30, 40];
const sizeNames: FontSizeAliases = {
micro: rawSizes[0],
small: rawSizes[1],
default: rawSizes[2],
large: rawSizes[3],
};
const fontSizes = Object.assign([], rawSizes, sizeNames);
游乐场链接