gpt4 book ai didi

typescript - 将函数返回值限制为 void

转载 作者:搜寻专家 更新时间:2023-10-30 21:36:41 25 4
gpt4 key购买 nike

bar 应该是一个没有返回值的函数:

let foo = () => 'foo';
let bar: () => void = foo; // produces no error

是否可以防止 bar 被分配一个与预期的 () => void 签名不匹配的函数?

例如,在这种情况下:

declare let jsApiThatShouldNeverAcceptTypeofFoo = (bar: () => void) => void;
jsApiThatShouldNeverAcceptTypeofFoo(bar);

最佳答案

部分解决方法是确保函数的返回类型没有键。 void 满足了这一点,{}never 也满足了这一点。这可能已经足够接近了,因为函数重新调整 never 应该会抛出错误,而返回 {} 的函数很少发生:

type EnsureVoid<T> = keyof T extends never ? 
void
: "Should not have a return type, only ()=> void is allowed";

declare let jsApiThatShouldNeverAcceptTypeofFoo: <T extends EnsureVoid<T>>(bar: ()=> T) => void;

let foo = () => 'foo';
jsApiThatShouldNeverAcceptTypeofFoo(foo) // Error


let bar = () => { };
jsApiThatShouldNeverAcceptTypeofFoo(bar)


let baz = () => ({ });
jsApiThatShouldNeverAcceptTypeofFoo(baz)

let boo = () => { throw "Error" };
jsApiThatShouldNeverAcceptTypeofFoo(boo)

关于typescript - 将函数返回值限制为 void,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50357435/

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