我有一个接口:
interface I {
// Question: I only really care about constraining the input parameters
fn: (s: string) => any
val: any
}
我使用此接口的目的只是要Assert
val
,我不关心约束它的类型- 确保
fn
是一个接受string
的函数,但我不关心约束返回类型
使用此选项的示例如下:
const noice = {
fn: (s: string) => s.length,
val: new Date()
}
const test1: I = noice
test1.fn // (property) I.fn: (s: string) => any
test1.val // (property) I.val: any
noice.fn // (property) fn: (s: string) => number
noice.val // (property) val: Date
有没有办法去掉any
,这样我就有了和noice
相同的test1
的特定类型?
也许现在是satisfies
,但是对于那些还没有升级和阅读“遗留”代码的人来说,4.9版本之前的版本呢?
1条答案
按热度按时间wribegjk1#
如果你使用的是typescript〉= 4.9并且你可以使用
satisfies
操作符,你可以:否则,您可以执行如下解决方法:
这里使用了currying,所以你不需要指定其他类型的参数。首先,你调用第一个带有你想要的约束的函数,然后调用第二个函数,它将返回相同的参数。这显然有一些小的运行时开销。