[英]React prop types with TypeScript - how to have a function type?
是否有使用 TypeScript 的 React prop 類型的函數類型的最佳實踐?
我認為這會起作用,但實際上它出錯了:
type Props = {
onClick: Function
};
const Submit = ({ onClick }: Props) => {
return (
<button type="button" onClick={onClick}>
click me
</button>
);
按照這個線程我讓它工作了,但它似乎不必要地冗長: https : //github.com/Microsoft/TypeScript/issues/20007
type Props = {
onClick: (...args: any[]) => any;
};
const Submit = ({ onClick }: Props) => {
return (
<button type="button" onClick={onClick}>
click me
</button>
);
Function
和最佳實踐 Function
在實踐中沒有足夠的類型安全性,是所有函數的超類型。 您最好用函數類型替換它 - 請參閱下面的“解決方案”部分。
在上面的示例中, Function
不能分配給更窄的onClick
函數類型,這會導致手頭的錯誤( Playground 示例)。
除了提到的問題,這里是TypeScript 文檔對Function
:
這是一個無類型的函數調用,通常最好避免,因為任何返回類型都是不安全的。 如果需要接受任意函數但不打算調用它,則類型
() => void
通常更安全。
typescript-eslint已經丟棄了帶有ban-types
規則的Function
,使用默認配置發出以下消息(另請參見此處):
Function
類型接受任何類似函數的值。 它在調用函數時不提供類型安全,這可能是錯誤的常見來源。 如果您希望函數接受某些參數,則應明確定義函數形狀。
React 已經帶有內置的事件處理程序類型來處理常見事件。
例如click
( 游樂場):
type Props = {
onClick: React.MouseEventHandler<HTMLButtonElement>
};
const Submit = ({ onClick }: Props) => <button onClick={onClick}> click </button>
更通用的替代方法是使用函數類型,如下所示:
type Props = { onClick: (event: React.MouseEvent<HTMLElement>) => void };
void
比any
更具限制性。 沒有機會在回調中意外返回一個值,這對於any
是可能的。
總之,我們采用 TypeScript 的打字功能,而不是使用Function
或any
. 現在已知參數是MouseEvent
和返回類型void
,將其標識為回調。
你可以簡單地這樣寫,這樣可以防止任何事情並且更有說服力。 特別是對於自定義函數:
界面道具 { onClick: (e: Event) => void; }
這將告訴調用組件,onClick 期望什么以及參數是什么。
希望這可以幫助。 快樂編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.