打字稿属性选择器

时间:2019-09-25 10:57:03

标签: typescript typescript-typings

我需要基于对象属性的简单类型检查,我想这样使用:

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

1 个答案:

答案 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");

play