我需要基于对象属性的简单类型检查,我想这样使用:
type User = { id: string, name: string }
sort<User>("name");
Intellisense为我提供“名称”或“ id”作为输入,如果输入其他任何内容,则显示“错误”。
尽管我只能传递property
值,但是在我当前的实现中,string
的类型不是string
。
sort<T extends { [key: string]: any }>(property: keyof T) {
// how can I make 'property' string ???
// required API object is e.g. { property: "Id", desc: true }
}
这里是playground。
答案 0 :(得分:3)
即使您的约束实际上有一个字符串索引器,keyof T
仍可能是number
,所以keyof T
最终还是string | number
您可以使用Extract
箭头仅输入字符串:
type Custom = {
property: string, //ok
desc: boolean
}
function sort<T>(property: Extract<keyof T, string>): Custom {
return {
property: property,
desc: false
}
}
type User = { id: string, name: string }
sort<User>("name");