如何基于类型化对象数组中的值限制类型?

克林特·安德鲁·霍尔

假设我有一个对象数组,并且想将函数的参数限制为那些对象的键值...我可以使用Typescript来做到这一点吗?我宁愿避免创建所有值的枚举...

const fonts = [
  {
    value: 'Font Name 1',
    label: 'Font Label 1',
  },
  {
    value: 'Font Name 2',
    label: 'Font Label 2',
  },
];

function doSomething(value) {
  // Do something.
}

function doSomethingElse(label) {
  // Do something.
}

doSomething('Font Name 1'); // good
doSomething('Font Name 2'); // good
doSomething('Font Name 3'); // error

doSomething('Font Label 1'); // good
doSomething('Font Label 2'); // good
doSomething('Font Label 3'); // error

这可能吗?

提香·切尔尼科娃·德拉戈米尔

您可以但可以在分配时使用一个函数,fonts以帮助打字稿推断值和标签的字符串文字类型。

然后我们可以使用类型查询获得的类型valuelabel这将是字符串文字类型的联合

function createFonts<T extends Array<{ value: V, label: L }>, V extends string, L extends string>(...o: T) {
    return o
} 
// Type as  [{ value: "Font Name 1"; label: "Font Label 1"; }, { value: "Font Name 2"; label: "Font Label 2"; }]
const fonts = createFonts({
    value: 'Font Name 1',
    label: 'Font Label 1',
},
{
    value: 'Font Name 2',
    label: 'Font Label 2',
})

function doSomething(value: typeof fonts[number]['value']) {
// Do something.
}

function doSomethingElse(label: typeof fonts[number]['label']) {
// Do something.
}

doSomething('Font Name 1'); // good
doSomething('Font Name 2'); // good
doSomething('Font Name 3'); // error

doSomethingElse('Font Label 1'); // good
doSomethingElse('Font Label 2'); // good
doSomethingElse('Font Label 3'); // error

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Java:如何确定对象数组中的对象类型?

如何基于数据中的属性值选择一个对象类型以使用Json.Net反序列化

如何在Haskell中基于输入值限制类型?

如何从对象数组中为每个不同的“类型”获取最大值为“ number”的对象?

打字稿:限制对象值的类型

如何基于数组的值定义类型?

如何基于对象值创建窄类型

如何基于超类型的对象创建子类型的对象?

如何从类型化对象的键中获取索引类型?

如何基于函数参数数组返回类型化的对象?

如何基于数组中对象的属性创建类型?

从数组类型创建对象类型,其中键是数组中每个对象的属性值

如何基于对象中的值限制对象类型?

如何根据对象数组中特定键的值来创建单位类型?

如何基于现有对象值定义Typescript对象类型?

如何基于模板化类型的祖先限制类的实例化

如何从成对的数组制作类型化的对象图?

可以在JSON数组/对象中输入的值的类型是什么?

如何在Java中将整数类型值或对象类型值存储到char数组中

如何限制 Profile 以查看基于 Salesforce 中的记录类型的案例?

如何使用基于对象值的键创建对象类型

如何从 TypeScript 中的对象数组创建类型?

如何限制类型脚本中的数组大小?

如何基于TypeScript中的const对象创建对象类型?

如何从数组对象中获取类型

打字稿:如何声明值等于对象键的数组类型?

TypeScript - 基于类型对象在函数 sig 中映射键类型与值类型

如何从 JSONB 类型数组中按值删除对象?

如何从类型化对象的属性值中提取文字类型?