Déduire le type en fonction de l'attribut le plus proche
P粉118698740
P粉118698740 2024-03-22 11:40:52
0
1
337

J'espère que quelqu'un pourra m'aider ou préciser si ce que j'essaie de réaliser est possible. Je crée actuellement un composant et j'ai des problèmes avec l'inférence de type. Ci-dessous le code.

import { faker } from "@faker-js/faker";
import * as React from "react";

type StringOrNumber = number | string;

type Offset = {
  top?: StringOrNumber;
  left?: StringOrNumber;
  right?: StringOrNumber;
  bottom?: StringOrNumber;
};

type Tab<T extends unknown[]> = {
  label: string;
  items: T;
  render: (item: T[number]) => JSX.Element | null;
  badgeCount?: StringOrNumber;
};

type NotificationProps<T extends Tab<unknown[]>[]> = {
  tabs?: T;
  offset?: Offset;
  heading?: string;
  onMarkAllUsRead?(): void;
};

export default function Notification<T extends Tab<unknown[]>[]>(
  props: NotificationProps<T>,
) {
  return <div>{props.heading}</div>;
}

// Example usage:
<Notification
  offset={{
    top: "50px",
  }}
  tabs={[
    {
      label: "Users",
      items: new Array(5).fill(null).map(() => ({
        name: faker.name.fullName(),
        email: faker.internet.email(),
      })),
      render: (user) => {
        return null;
      },
    },
    {
      label: "Emails",
      items: new Array(5).fill(null).map(() => ({
        type: faker.random.word(),
        body: faker.lorem.paragraph(),
      })),
      render: (email) => {
        return null;
      },
    },
  ]}
/>;

Ce que je veux réaliser, c'est faire render 中的参数推断出最接近的 items 的类型,但目前它的类型为 unknown. Est-ce qu'il y a un moyen de faire ça? Merci d'avance

P粉118698740
P粉118698740

répondre à tous(1)
P粉798010441

Je ne peux pas commenter car je n'ai pas 50 de réputation, mais ce que je dis, c'est que vous obtiendrez des erreurs implicites car vous limitez le tableau générique à inconnu[], ce qui signifie que ses éléments peuvent être de n'importe quel type . Si vous avez fait quelque chose comme ça :

type Tab = {
   label: string;
   items: T;
   render: (item: T[number]) => string | null;
   badgeCount?: string | number;
};

Typescript saura que chaque élément du tableau T est un nombre. Ceci est un exemple très simple, mais juste pour que vous puissiez signaler votre erreur.

C'est ma solution一个>.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!