【问题标题】:Io-ts interface for properties with unknown keys具有未知键的属性的 Io-ts 接口
【发布时间】:2020-11-18 11:06:34
【问题描述】:

我正在尝试创建如下的io-ts接口

my-interface.ts

export interface myInterface {
  [key:string]?: string | undefined | null
}

我想把它变成 io-ts 等价物。最终目标是将其与另一个现有的 io-ts 接口结合起来

my-other-interface.ts

export const MyOtherInterfaceV = t.interface({
  requiredProp1: ValidString// custom type, checks string is populated
  requiredProp2: ValidString
  // All other fields marked as required
})

export type MyOtherInterface = t.TypeOf<typeof MyOtherInterfaceV>;

我的想法是我需要一个类型来表示有效负载,该有效负载将包含一些我们需要且必须有效的字段,以及一些我们不知道且可以是可选的字段。我们希望将这些组合起来以供稍后在处理中使用,最终存储在 dynamodb 中

【问题讨论】:

  • 嗨@jbailie1991 我的回答对你有用吗?

标签: typescript types fp-ts


【解决方案1】:

io-ts中与myInterface最接近的可能是t.UnknownRecord

export const MyOtherInterfaceV = t.interface({
  requiredProp1: t.string,
  requiredProp2: t.string
})

const MyOtherInterface = t.intersection([ t.UnknownRecord, MyOtherInterfaceV ]);

【讨论】:

    【解决方案2】:

    我认为您正在寻找的答案是记录:

    const myInterfaceCodec = t.record(t.string, t.union([t.string, t.undefined, t.null]));
    export type MyInterface = t.TypeOf<typeof myInterfaceCodec>;
    

    => type MyInterface = { [x: string]: string |空 |不明确的; }

    您的用例:

    const myInterfaceV = t.record(t.string, t.union([t.string, t.undefined, t.null]));
    export type MyInterface = t.TypeOf<typeof myInterfaceV>;
    
    const myOtherInterfaceV = t.intersection([
        t.type({
            requiredProp1: t.string,
            requiredProp2: t.string
        }),
        myInterfaceV
    ]);
    export type MyOtherInterface = t.TypeOf<typeof myOtherInterfaceV>;
    
    const a: MyOtherInterface = {
        requiredProp1: "string",
        requiredProp2: "string2"
    };
    
    const b: MyOtherInterface = {
        requiredProp1: "string",
        requiredProp2: "string2",
        optionalProp1: "hello",
        optionalProp2: "world"
    };
    

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2021-01-09
      • 1970-01-01
      • 2022-11-25
      • 2019-04-03
      • 2021-01-29
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      相关资源
      最近更新 更多