至少有一个属性存在/数组长度不为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 属性是必需的,而 bc 至少有一个是必需的。

数组必须有值

要在 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'
      }
    ]
  }
]

文章评论区

欢迎留言交流

未登录,请先注册或登录后发表评论。

Leave comment