繁体   English   中英

类型表示代表在Typescript中具有特定值类型的对象的键

Type to represent the keys of an object that have specific value type in Typescript

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有一个带有两个键的配置对象的函数。 这些值是对象中键的数组。

Config类型的a值将从类型T的对象中删除,但是b值需要以仅对字符串值键有效的某种方式进行转换。

结果是一个将类型T作为显式参数的函数,并返回一个对类型T的对象进行转换的函数:

interface Config<T extends Object, K extends keyof T> {
  a?: K[]  // keys to remove from T, this works fine
  b?: K[]  // keys to modify string value - want to constrain these
}

export function f<T extends Object>(config: Config<T, keyof T>): (row: T) => Partial<T> {
  return function (row) {
    // remove keys from config.a
    // do something stringy with keys from config.b
  }
}

叫做:

const fn = f<SomeType>({ a: [...], b: [...] })

有什么方法可以将Config接口中的b限制为仅字符串值的键? 我尝试了所有可能想到的方法,但尝试的大多数方法都产生了语法错误。 我现在正在通过将字符串值强制转换为string来解决此问题,因为类型系统不知道它们是字符串。 有一个更好的方法吗?

1 个回复

如果您不需要跟踪要删除/添加的键的实际并集,则可以从Config删除K参数。 从您的示例中,我认为这不是必需的。

要只获取某种类型的键,我们可以使用条件类型和映射类型:

interface Config<T extends Object> {
    a?: (keyof T)[]  // keys to remove from T, this works fine
    b?: KeyOfValueType<T, string>[]  // keys to modify string value - want to constrain these
}
type KeyOfValueType<T, TValue> = {[P in keyof T]: T[P] extends TValue ? P : never}[keyof T];


export function f<T extends Object>(config: Config<T>): (row: T) => Partial<T> {
    return function (row) {

        return null as any;
    }
}
interface SomeType {
    nr: number;
    str: string
}
const fnOk = f<SomeType>({ a: ['nr'], b: ['str' ] })
const fnNok = f<SomeType>({ a: ['nr'], b: ['str', 'nr'] })
1 如何在Typescript中表示值的类型?

如何在Typescript中表示任意类型的值? 例如: 上面的代码有行为相同first instanceof second ,但我想不出什么类型的second必须使这项工作。 这个问题与打字稿中的“类”是否有类型有关? “任何”包括它吗? 但没有一个答案适用于具有私有构造函数的类(例如Loc ...

2 typescript:代表任何原始类型的值类型

定义可以接受string , number和boolean元值中的任何一个的属性的最佳方法是什么。 我需要一个属性来接受任何这些原始类型作为html输入字段(可以是text / int / bool)中的值。 具有我一直在寻找的any命中类型的安全性(具体地说,它不应是对象,函数类型)。 ...

5 TypeScript:接受映射到特定类型的所有对象键

给定一个对象类型(或类类型),我想编写一个接受该对象及其键列表的函数。 但是,我只想允许映射到特定类型值的键,例如仅字符串。 例子: function shouldOnlyAcceptStringValues(o, key) { // Do something with o[key] th ...

9 TypeScript 映射类型以表示具有可选 Observables 的对象(带有字符串字面量映射键)

我需要一个映射类型来表示一个对象,其中属性是可选的 RxJS Observables。 实现这一目标的最简单和最简单的方法是使用这种类型: 它可以像这样使用: (我有一个单独的函数来解析一个对象并订阅 observables。但这个问题并不是真正关于它的 RxJS 方面。) 但是... ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM