Jenis kesimpulan berdasarkan atribut terdekat
P粉118698740
P粉118698740 2024-03-22 11:40:52
0
1
334

Saya harap seseorang boleh membantu saya atau menjelaskan jika apa yang saya cuba capai adalah mungkin. Saya sedang mencipta komponen dan saya menghadapi masalah dengan inferens jenis. Di bawah ialah kod.

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;
      },
    },
  ]}
/>;

Apa yang saya ingin capai ialah membuat render 中的参数推断出最接近的 items 的类型,但目前它的类型为 unknown. Adakah terdapat cara untuk melakukan ini? Terima kasih terlebih dahulu

P粉118698740
P粉118698740

membalas semua(1)
P粉798010441

Saya tidak boleh mengulas kerana saya tidak mempunyai 50 reputasi, tetapi apa yang saya katakan ialah anda akan mendapat sebarang ralat tersirat kerana anda mengehadkan tatasusunan generik kepada tidak diketahui[], yang bermaksud itemnya boleh daripada apa-apa jenis . Jika anda melakukan sesuatu seperti ini:

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

Skrip taip akan mengetahui bahawa setiap item dalam tatasusunan T ialah nombor. Ini adalah contoh yang sangat mudah, tetapi hanya supaya anda boleh menunjukkan ralat anda.

Ini adalah penyelesaian一个> saya.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!