【发布时间】:2021-09-03 01:34:55
【问题描述】:
这里是重现问题的最少代码:
const map = {
FOO: 'foo',
BAR: 'bar',
} as const
export const CSV_COLUMNS_ALL = Object.values(map)
export type ColumnName = typeof CSV_COLUMNS_ALL[number]
export type RowField<CN extends ColumnName> = {
/** The Original value from the CSV file */
original: string
/** The row index for the csv row that this field belongs to */
rowIndex: number
/** The header text in the CSV for this column of data */
columnName: CN
}
export type CsvRow = {
[k in ColumnName]?: RowField<k>
} & {
index: number
}
const row:CsvRow = CSV_COLUMNS_ALL.reduce((row, columnName) => {
row[columnName] = { columnName, original: '', rowIndex: 1 }
return row
}, { index: 1 } as CsvRow)
有问题的行是这一行:
row[columnName] = { columnName, original: '', rowIndex: 1 }
它基本上告诉我我不能将此值分配给类型“未定义”
但是,row 是 CsvRow 类型,columnName 是 ColumnName 类型,这应该是一个可分配的属性,具有可选的 RowField<ColumnName> 类型,这满足了。
那么为什么它阻止了我,我该如何解决?
【问题讨论】:
标签: typescript typescript-generics