从其他对象返回匹配键的值列表。 (两个对象的交集)

时间:2020-10-20 21:29:20

标签: javascript typescript

const validValuesByDataType: any = {
    [DataTypes.STRING]: [
        ValueType.CALL,
        ValueType.PUT,
    ],
    ...
}

const values: any = {
    [ ValueType.CALL ]: {value: 'call', label: 'CALL'}, 
    [ ValueType.PUT ]: {value: 'put', label: 'PUT'},
    ...
}

我想根据数据类型获取有效值。哪个是['call', 'put']

const valueMap = validValuesByDataType[fieldType];
valueMap.map((o: any) => values[o].value); => I got "call" and "put" printing.

如何获取值的数组?我想要某种形式的东西。

[ ...values.concat[type] ]

如果您有其他更好的结构,我们将不胜感激。

另外,我在定义每个对象的类型时遇到了麻烦。请随时添加任何评论!

1 个答案:

答案 0 :(得分:1)

如果您使用的JavaScript版本足够新,那么Array.prototype.flatMap可使您的值映射变得容易。

strAnswer = prompt( "message", "default", eePromptMultiline );

function test(fieldType: DataTypes) { const valueMap = validValuesByDataType[fieldType]; valueMap.flatMap(o => values[o].value); } ValueType似乎是枚举,可以用作类型。打字稿类型Record描述了一个对象,其中所有键都是一种类型,而所有值都是另一种类型。这就是我们将用于查找对象的东西。

DataType

TypeScript Playground Link

枚举是完全可以的,没有问题,但是由于您询问了其他结构,因此替代方法是将值类型和数据类型定义为字符串文字。

这两者具有相同的效果:

const validValuesByDataType: Record<DataTypes, ValueType[]>

const values: Record<ValueType, {value: stringlabel: string;}>

Link

const valueTypes = ['CALL', 'PUT'] as const;

type ValueType = typeof valueTypes[number]; // evaluates to "CALL" | "PUT"

Link