我创建了一个函数来选择和keyof深度对象。但我不知道为什么我的对象上的keyof在它是一个选项时不起作用。
type Database = {
User?: {
id: string
name: string
},
Post?: { // if i remove ? it work but it should be an option
id: string
content: string
}
}
type SelectQuery<T> = {
[Table in keyof T]?: {
select: {
[field in keyof T[Table]]?: boolean
}
}
}
function select(query: SelectQuery<Database>) {}
select({
Post: {
select: {
// it should suggest content and id here
}
}
})
字符串
Playground链接
1条答案
按热度按时间gblwokeq1#
问题是你在
Database
类型中嵌套了可选字段,当你访问一个表时,你得到一个类型tableFields | undefined
,而keyof
在这种情况下返回never
。范例:字符串
要解决此问题,您可以使用内置的NonNullable实用程序类型:
型
使用方法:
型
Playground