gpt4 book ai didi

typescript - 定义另一个属性时需要一个属性(有区别的联合)

转载 作者:行者123 更新时间:2023-12-03 16:31:29 26 4
gpt4 key购买 nike

我想编写一种类型,它允许使用一些始终需要的核心属性和一个可选属性来创建对象 imageUrl定义为字符串时表示 imageAltText也需要作为字符串,

{
id: "test",
imageUrl: "test",
imageAltText: "test"
}
我也希望它能够工作,以便当 imageUrl没有定义我不指望 imageAltText被定义为。
{
id: "test"
}
我已将类型定义如下,
(
{
/** image url for the banner of the card. Will display a blue background without an image */
imageUrl?: undefined;
}
|
{
/** image url for the banner of the card. Will display a blue background without an image */
imageUrl: string;
/** alternative text for the banner image */
imageAltText: string;
}
)

However, by making `imageUrl` optional `?` typescript allows me to write `imageAltText` even when `imageUrl` is undefined.

最佳答案

在这里你有:


type RequiredParams<T = {}> = {
id: string
} & T

type UnionParams =
| RequiredParams<{ imageUrl: string; imageAltText: string; }>
| RequiredParams

type UnionKeys<T> = T extends T ? keyof T : never;
type StrictUnionHelper<T, TAll> =
T extends any
? T & Partial<Record<Exclude<UnionKeys<TAll>, keyof T>, never>> : never;

type StrictUnion<T> = StrictUnionHelper<T, T>

type Result = StrictUnion<UnionParams>

const a: Result = { id: 'sdf' }; // ok
const b: Result = { id: 'sdf', imageUrl: 'sdf', imageAltText: 'sdf' } // ok
const c: Result = { id: 'sdf', imageUrl: 'sdf' } // error
const d: Result = { id: 'sdf', imageAltText: 'sdf' } // error
所有积分转至 @Titian Cernicova-Dragomir

关于typescript - 定义另一个属性时需要一个属性(有区别的联合),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66436490/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com