gpt4 book ai didi

javascript - 如何定义装饰器的类型以防止丢失装饰函数的类型信息?

转载 作者:行者123 更新时间:2023-11-29 10:33:22 26 4
gpt4 key购买 nike

鉴于以下情况:

// @flow

function a(s: string): ?string {
return s === '' ? null : s
}

function decorate(f: Function): Function {
return f
}

const b = decorate(a)

a(12)
b(12)

当你用一个数字调用 a 时,flow 会抛出一个错误,但当你用一个数字调用 b 时,不会抛出错误

13: a(12)
^^ number. This type is incompatible with the expected param type of
3: function a(s: string): ?string {
^^^^^^ string

有没有一种方法可以做类似的事情

function decorate(f: Function): typeof(f) {
return f
}

这样装饰函数就可以正确地进行类型检查,而无需明确限制装饰返回的内容

function decorate(f: Function): (string) => ?string {}

或复制 b 上的类型信息,如

const b: typeof(a) = decorate(a)

最佳答案

您需要创建函数 polymorphic为此:

function decorate<T: Function>(f: T): T {
return f
}

关于javascript - 如何定义装饰器的类型以防止丢失装饰函数的类型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41048219/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com