至少有一个属性存在/数组长度不为0
对象多个属性至少一个属性存在假如我有一个对象,对象里面有三个属性abc都是字符串类型,a属性必须存在,bc属性至少有一个必须存在,我如何用typescript来描述这个类型你可以使用 TypeScript 的交叉类型和条件类型来描述这个对象类型。下面是一个示例:type MyObject = ...
2024年10月21日
412字
对象多个属性至少一个属性存在
假如我有一个对象,对象里面有三个属性abc都是字符串类型,a属性必须存在,bc属性至少有一个必须存在,我如何用typescript来描述这个类型
你可以使用 TypeScript 的交叉类型和条件类型来描述这个对象类型。下面是一个示例:
type MyObject = {
a: string;
} & (
| { b: string; c?: string }
| { c: string; b?: string }
);在这个定义中,a 属性是必需的,而 b 和 c 至少有一个是必需的。
数组必须有值
要在 TypeScript 中表示一个属性值为非空数组,你可以使用元组类型和泛型的结合来确保数组至少有一个元素。下面是一个示例:
type MyObject = {
a: string;
b: string[];
};
// 确保 b 是非空数组
type NonEmptyArray<T> = [T, ...T[]];
type MyObjectWithNonEmptyArray = {
a: string;
b: NonEmptyArray<string>;
};
// 示例
const example: MyObjectWithNonEmptyArray = {
a: "Hello",
b: ["World"], // b 数组至少有一个元素
};在这个示例中,NonEmptyArray<T> 是一个类型别名,用于表示至少包含一个元素的数组。MyObjectWithNonEmptyArray 这样定义后,b 必须是一个非空字符串数组。
例:快捷键数据结构设计
type NonNullArray<T> = [T, ...T[]];
// keyboard item
type KeyboardItem = {
name: string;
icon?: string | ReactNode;
} & (
| { md: string; keydown?: string }
| { keydown: string; md?: string }
);
// keyboard block
type KeyboardHelpItem = {
title: string;
keyboardItems: NonNullArray<KeyboardItem>;
desctiption?: string;
}
const keyboardHelpMaps: KeyboardHelpItem[] = [
{
title: 'common methods',
keyboardItems: [
{
name: 'blod',
md: '**text**space',
keydown: 'ctrl+b'
}
]
}
]
文章评论区
欢迎留言交流