Typescript 类型脚本属性选择器

Typescript 类型脚本属性选择器,typescript,typescript-typings,Typescript,Typescript Typings,我需要基于对象属性的简单类型检查,我希望使用如下方式: type User = { id: string, name: string } sort<User>("name"); 这里是。即使约束有一个字符串索引器,实际上keyof T仍然可以是一个数字,因此keyof T最终将是字符串|数字 您可以使用“提取到箭头”仅提取字符串: type Custom = { property: string, //ok desc: boolean } function sort&

我需要基于对象属性的简单类型检查,我希望使用如下方式:

type User = { id: string, name: string }
sort<User>("name");

这里是。

即使约束有一个字符串索引器,实际上keyof T仍然可以是一个数字,因此keyof T最终将是字符串|数字

您可以使用“提取到箭头”仅提取字符串:


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

即使您的约束有一个字符串索引器,实际上keyof T仍然可以是一个数字,因此keyof T最终将成为string | number

您可以使用“提取到箭头”仅提取字符串:


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

属性类型是来自T的键的并集,看起来很好。为什么要使用字符串类型的属性?我已编辑了我的问题。因为在这个方法中我只需要一个属性。KEYOFT不是要求,这是我目前实现它的方式。嗯。。。你为什么不这样定义sortproperty:string{呢?因为我会有任何智能感知告诉我只传递t的属性名,这是问题的关键。我不确定我是否理解你的意思。但是你可以试试这个sortproperty:keyof t | string{property type是T中键的并集,看起来很好。为什么要使用类型为string的属性?我已经编辑了我的问题。因为我在该方法中只需要一个属性。keyof T不是必需的,这是我目前实现它的方式。嗯……为什么不定义sortproperty:string{这样吗?因为我会有任何智能感知告诉我只传递T的属性名,这是问题的关键。我不确定我是否理解你的意思。但是你可以试试这个sortproperty:keyof T | string{