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 类型:至少传一个属性 与 只允许传入一个属性的主要内容,如果未能解决你的问题,请参考以下文章
react+ts 项目:ts(2322),类型“Readonly<{}>”上不存在属性“day”。ts(2339) 解决办法
react+ts 项目:ts(2322),类型“Readonly<{}>”上不存在属性“day”。ts(2339) 解决办法