TS 类型:至少传一个属性 与 只允许传入一个属性

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TS 类型:至少传一个属性 与 只允许传入一个属性相关的知识,希望对你有一定的参考价值。

TS 类型:至少传一个属性 与 只允许传入一个属性

找到的 code snippet,正好符合需求

原文地址:typescript interface require one of two properties to exist

playground: Here is a TypeScript playground link showing both in action

原始答案:

type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<
  T,
  Exclude<keyof T, Keys>
> &
  
    [K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
  [Keys];

type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Pick<
  T,
  Exclude<keyof T, Keys>
> &
  
    [K in Keys]-?: Required<Pick<T, K>> &
      Partial<Record<Exclude<Keys, K>, undefined>>;
  [Keys];

TS 3.5 更新:

type RequireAtLeastOne<T, R extends keyof T = keyof T> = Omit<T, R> &
   [P in R]: Required<Pick<T, P>> & Partial<Omit<T, P>> [R];

export type RequireOnlyOne<T, Keys extends keyof T = keyof T> = Omit<T, Keys> &
  
    [K in keyof Required<T>]: Required<Pick<T, K>> &
      Partial<Record<Exclude<Keys, K>, undefined>>;
  [Keys];

以上是关于TS 类型:至少传一个属性 与 只允许传入一个属性的主要内容,如果未能解决你的问题,请参考以下文章

TS 类型:至少传一个属性 与 只允许传入一个属性

TS之装饰器

react+ts 项目:ts(2322),类型“Readonly<{}>”上不存在属性“day”。ts(2339) 解决办法

react+ts 项目:ts(2322),类型“Readonly<{}>”上不存在属性“day”。ts(2339) 解决办法

MyBatis之传入参数

props的对象写法