為什么我收到此錯誤訊息:
Type '(message?: string | undefined) => void' is not assignable to type '(event: GestureResponderEvent) => void'.
Types of parameters 'message' and 'event' are incompatible.
Type 'GestureResponderEvent' is not assignable to type 'string'.ts(2322)
當我使用這樣的功能時:
<Button onPress={handleToggleModalMessage} style={[ButtonStyles.full, s.noneBorderTop]}>
<Text style={s.errorBtn}>Ok!</Text>
</Button>
但是當我以這種方式使用上述函式時,我不會收到 ts 錯誤:
<Button onPress={() => handleToggleModalMessage()} style={[ButtonStyles.full, s.noneBorderTop]}>
<Text style={s.errorBtn}>Ok!</Text>
</Button>
誰能解釋我為什么?
uj5u.com熱心網友回復:
您的第一個示例是推斷引數,這意味著它正在傳遞默認值。第一個例子相當于這個
<Button onPress={(event) => handleToggleModalMessage(event)} style={[ButtonStyles.full, s.noneBorderTop]}>
<Text style={s.errorBtn}>Ok!</Text>
</Button>
的型別簽名handleToggleModalMessage(event)與您定義的不兼容。它不期望任何內容或字串,但您傳入的是GestureResponderEvent
uj5u.com熱心網友回復:
這個問題與反應無關,所以讓我用純打字稿重新表述它:
type FN = (event: GestureResponderEvent) => void;
function handler(message?: string | undefined) {
console.log(message);
}
const f1: FN = handler; // ERROR
const f2: FN = () => handler(); // OK
注意:
() => handler()保證它將忽略傳遞給它的任何引數handler可以使用它的引數,即message?: string | undefined
現在考慮:
const e: GestureResponderEvent = ...
f1(e);
f2(e);
兩個呼叫都是合法的——兩個函式都有 FN 型別。handler如果對型別的賦值FN是合法的,這意味著我們可以將型別引數傳遞GestureResponderEvent給接受可選的函式string——這可能會在運行時中斷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453900.html
