[英]How do I use a Consumer in a React app with TypeScript?
我有一個定義如下的 React 組件:
import React from 'react';
import { AuthUserContext } from '../Session';
const Account = () => (
<AuthUserContext.Consumer>
{
authUser => {
return(
<div>
<h6 className="accountInfo"><strong>Account:</strong> {authUser.email} </h6>
</div>
)
}
}
</AuthUserContext.Consumer>
);
export default Account;
這將引發錯誤Object is possibly 'null'
指的是在 h6 行中使用 authUser.email。
即使我這樣做:
authUser ? <h6 className="accountInfo"><strong>Account:</strong>
{authUser.email}
</h6>
: null
它仍然給出同樣的錯誤。
當authUser
在withAuthentication
中定義時,它的值最初設置為 null,但我認為添加對authUser
的檢查將確保它在命中 authUser.Z0C83F57C786A0B4ACBZ9EF 時永遠不是authUser.email
。
我究竟做錯了什么?
此行為可能是由於條件表達式周圍缺少大括號引起的,但它是由於null
上下文類型和不准確的 TypeScript 錯誤的組合。
如果上下文是這樣創建的
const context: {email: string} | null = null
const AuthUserContext = React.createContext(context)
TypeScript 將推斷類型React.Context<null>
,因為context
的類型縮小到null
。 通常這只會導致使用時缺少屬性錯誤,但 TypeScript 似乎在閉包內的條件表達式中出現null
常量的錯誤消息問題。
在下面的代碼( 操場)中, weird
的產生Object is possibly 'null'
o
上的“空”錯誤,而nonWeird
產生正確的錯誤消息。
const o = null
const weird = () => o ? o.p : '' // Error: Object is possibly 'null'.
const notWeird = o ? o.p : '' // Error: Property 'p' does not exist on type 'never'.
這解釋了authUser.email
上的奇怪錯誤消息。 可以通過向createContext
提供類型參數來解決根本問題:
const React.createContext<{email: string} | null>(null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.