根据 TypeScript 中的查找类型限制通用键类型

亨利伍迪

我正在研究一个带有两个类型参数的函数,T并且K. T扩展Record类型并且K是第一种类型的键。有没有一种方法可以根据它的查找类型 ( T[K])来限制键类型T

我有以下类型:

type FormValue = string | number | boolean | null;

type FormValues = Record<string, FormValue>;

以及以下功能:

function numericFormHelperFunc<T extends FormValues, K extends keyof T>(key: K, formValues: T) {}

有没有一种方法可以限制哪些键可用于此功能,以便只允许formValues具有查找类型的number基本上是一种断言T[K] extends number.

例如,如果我有这个示例表单类型:

type MyFormValues = {
    name: string;
    age: number;
    numPets: number;
}

我可以添加类型限制numericFormHelperFunc以便只有键"age""numPets"可以使用吗?

我正在寻找一种静态方法来执行此操作,以便我会收到有关尝试使用numericFormHelperFunc("name", myFormValues). 也想为打字稿知道,从仰视的价值keyformValues为特定类型的,而不仅仅是T[K](如使号码特定的方法和运算符可以不用类型的断言使用)。

约塞连船长

这是解决方案:

type FormValue = string | number | boolean | null;

type FormValues = Record<string, FormValue>;

type MyFormValues = {
  name: string;
  age: number;
  numPets: number;
}

/**
 * Takes two arguments,
 * T - indexed type
 * Allowed - allowed types
 * 
 * Iterates through all properties and check
 * if property extends allowed value
 */
type Filter<T, Allowed> = {
  [P in keyof T]: T[P] extends Allowed ? P : never
}[keyof T]

function numericFormHelperFunc<T extends FormValues>(key: Filter<MyFormValues, number>, formValues: T) { }

numericFormHelperFunc('age', {'sdf':'sdf'}) // ok
numericFormHelperFunc('numPets', {'sdf':'sdf'}) // ok
numericFormHelperFunc('hello', {'sdf':'sdf'}) // error
numericFormHelperFunc('2', {'sdf':'sdf'}) // error
numericFormHelperFunc('name', {'sdf':'sdf'}) // error

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据TypeScript中的通用类型值添加字段?

TypeScript根据输入类型定义通用输出类型

如何限制 Typescript 中的通用返回类型?

根据TypeScript中的另一个通用参数推断通用类型参数

根据Typescript中的类型实现特定行为

根据通用接口的实现来限制Java中的通用类型

Typescript-根据参数返回通用接口类型

Typescript-根据给定的键确定子对象的类型

根据提供的参数返回字典键的Typescript类型推断

Typescript 根据参数强制函数返回类型为接口的键

TypeScript根据类型参数返回不同的类型

根据 Typescript 中同级属性的泛型类型推断类型

根据返回类型限制“类型”的键

根据其他属性动态限制TypeScript中对象属性的类型

Typescript 中的通用类型

我可以使用 Typescript 泛型根据类型从对象中过滤键吗?

是否可以在TypeScript类型和通用键类型中混合使用特定类型的键?

Typescript 方法根据属性返回类型

TypeScript根据参数数量创建类型

TypeScript遍历对象并根据值创建类型

根据TypeScript中的参数在字典中定义函数的返回类型

根据先前类型的输入(TypeScript)将输入的可能值限制为派生类型

根据TypeScript中的参数动态生成返回类型

根据Typescript中的字符串推断类型

如何根据 switch case 为 TypeScript 中的对象分配类型

根据Typescript中的对象数组创建对象类型

根据TypeScript中的参数值更改返回类型

根据Typescript中多个对象的同名属性创建对象类型?

根据列表中对象的属性定义Typescript类型