如何在 React 和 TS 应用程序中重用类型
How to re-use type in React & TS application
我正在用 React & TS 制作应用程序,并尽力改进代码(重用类型)。
我有类型:
export type Book = {
author: string
title: string
}
现在我有 2 个组件正在使用这种类型。
在第一个组件中,我的编译器没有发现任何问题。 (books.data - type Book
的对象数组)
<BookContent>
{books.data.map((book: Book) => {
return <SingleBook key={book.id} book={book} />;
})}
</BookContent>;
但是在 SingleBook 组件中,我在道具中收到错误类型:Property 'book' does not exist on type 'Book'.ts(2339)
export const SingleBook = ({ book }: Book) => {
return <SingleBookContainer>...restOfCode</SingleBookContainer>;
};
我应该怎么做才能解决这个问题?
编辑:
(property) book: Book
Type '{ key: number; book: Book; }' is not assignable to type 'IntrinsicAttributes & Book'.
Property 'book' does not exist on type 'IntrinsicAttributes & Book'.ts(2322)
因为你正在解构 props 并将其键入 Book
第一个解决方案
export const SingleBook = ({ book }: { book: Book }) => {
return <SingleBookContainer>...restOfCode</SingleBookContainer>;
};
第二种解决方案
type Props = {
book: Book
}
export const SingleBook = ({ book }: Props) => {
return <SingleBookContainer>...restOfCode</SingleBookContainer>;
};
我正在用 React & TS 制作应用程序,并尽力改进代码(重用类型)。
我有类型:
export type Book = {
author: string
title: string
}
现在我有 2 个组件正在使用这种类型。
在第一个组件中,我的编译器没有发现任何问题。 (books.data - type Book
的对象数组)
<BookContent>
{books.data.map((book: Book) => {
return <SingleBook key={book.id} book={book} />;
})}
</BookContent>;
但是在 SingleBook 组件中,我在道具中收到错误类型:Property 'book' does not exist on type 'Book'.ts(2339)
export const SingleBook = ({ book }: Book) => {
return <SingleBookContainer>...restOfCode</SingleBookContainer>;
};
我应该怎么做才能解决这个问题?
编辑:
(property) book: Book
Type '{ key: number; book: Book; }' is not assignable to type 'IntrinsicAttributes & Book'.
Property 'book' does not exist on type 'IntrinsicAttributes & Book'.ts(2322)
因为你正在解构 props 并将其键入 Book
第一个解决方案
export const SingleBook = ({ book }: { book: Book }) => {
return <SingleBookContainer>...restOfCode</SingleBookContainer>;
};
第二种解决方案
type Props = {
book: Book
}
export const SingleBook = ({ book }: Props) => {
return <SingleBookContainer>...restOfCode</SingleBookContainer>;
};