当我使用箭头功能时 ts 错误消失但当我不使用箭头时出现
ts error goes away when I use arrow function but come when I not use arrow
为什么我收到此错误消息:
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>
谁能解释一下为什么?
这个问题与react无关,所以让我用纯打字稿改写一下:
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
的函数 - 这可能会中断运行时间。
你的第一个例子是推断参数,这意味着它传递了默认值。第一个例子相当于这个
<Button onPress={(event) => handleToggleModalMessage(event)} style={[ButtonStyles.full, s.noneBorderTop]}>
<Text style={s.errorBtn}>Ok!</Text>
</Button>
handleToggleModalMessage(event)
的类型签名与您定义的不兼容。它不期望任何内容或字符串,但您传入的是 GestureResponderEvent
为什么我收到此错误消息:
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>
谁能解释一下为什么?
这个问题与react无关,所以让我用纯打字稿改写一下:
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
的函数 - 这可能会中断运行时间。
你的第一个例子是推断参数,这意味着它传递了默认值。第一个例子相当于这个
<Button onPress={(event) => handleToggleModalMessage(event)} style={[ButtonStyles.full, s.noneBorderTop]}>
<Text style={s.errorBtn}>Ok!</Text>
</Button>
handleToggleModalMessage(event)
的类型签名与您定义的不兼容。它不期望任何内容或字符串,但您传入的是 GestureResponderEvent