![](/img/trans.png)
[英]Infer function generic type U from return value of passed function
[英]Infer type from return value
似乎如果在另一個函數中檢查該變量是否存在,那么Typescript無法推斷變量不為null
或undefined
。 這是一個例子。
(我正在使用帶有--strictNullChecks的Typescript。)
const login = (email: string) => {
console.log(email);
}
const handleButtonClick = (email?: string) => {
const error = validate(email);
if (error) {
return;
}
return login(email);
}
const validate = (email?: string) => {
if (!email) {
return 'There was an error'
}
}
Typescript在handleButtonClick
中抱怨你不能使用可能未定義的電子郵件調用login
。 但是,我們確保在validate
調用中定義了email
。
Typescript可以解決這個問題嗎?
你是對的,TypeScript沒有跟蹤在當前函數之外完成的縮小。 這是您何時可以使用非null斷言的示例之一:
const handleButtonClick = (email?: string) => {
const error = validate(email);
if (error) {
return;
}
return login(email!);
}
我討厭非空斷言。 我有時避免這種情況的一種方法是將我的驗證器函數轉換為類型保護 ,技術上只返回true或false,但也在調用站點啟用類型縮小:
const login = (email: string) => {
console.log(email);
}
const handleButtonClick = (email?: string) => {
if (isValidEmail(email)) {
return login(email);
}
console.log("Invalid email!");
}
const isValidEmail = (email?: string): email is string => {
return !!email;
}
在操場上的示例 (在選項中檢查strictNullChecks
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.