gpt4 book ai didi

typescript - 如何强制回调参数的类型合规性

转载 作者:行者123 更新时间:2023-12-05 04:21:23 26 4
gpt4 key购买 nike

bar 的 arg 参数类型中缺少属性 b 时,如何让下面的 foobar(fn) 出错?

const foo = (arg: {a: any,b: any})=>1

const foobar = <T extends typeof foo>(arg:T)=>1

const bar = (arg: {a: string})=>1

// how would one type this so that `bar` is
// flagged as invalid, because prop `b` is missing?
foobar(bar)

code

对我的人脑来说,bar 不会扩展 foo - 我相信这是由于逆变而发生的,但我仍然一无所知,因此才有了这个问题。

最佳答案

我们需要的非常有用的类型(来自 here ):

type Equals<T, U> =
(<G>() => G extends T ? 1 : 2) extends
(<G>() => G extends U ? 1 : 2) ? true : false;

然后你可以检查 T 是否等于 foo 的类型:

const foobar = <T extends typeof foo>(arg: Equals<T, typeof foo> extends true ? T : never)=>1

如果是,它应该是T,否则never

似乎有效!

Playground

关于typescript - 如何强制回调参数的类型合规性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74229462/

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