typescript - 在 typescript 泛型中使用通配符
问题描述
这可能是一个简单的解决方案,但我还没有遇到过。给定一个 typescript 函数,比如func<T, D = any>(param1: T, param2: D) { ... }
and 我用两个参数param1
和param2
. 是否可以在不指定类型的D
情况下指定类型,T
以便打字稿仍然推断类型T
但强制执行类型D
?
示例:假设我想强制使用外部接口定义的类型调用此函数:
export interface Data {
field1: string;
field2: boolean;
}
我现在可以使用func('Hello', {field1: 'World', field2: true})
(这不能确保它param2
是一个有效的Data
对象)或者我可以使用func<string, Data>('Hello', {field1: 'World', field2: true})
. 我不想做的是func<any, Data>('Hello', {field1: 'World', field2: true})
。有解决方案吗?
解决方案
这称为部分参数推断,目前不支持。有一个建议添加这个,但据我所知,它并没有被积极地阅读。
您可以使用函数柯里化来实现这一点,尽管结果并不那么漂亮:
function func<T>(param1: T) {
return function <D>(param2: D) {
return [param1, param2]
}
}
export interface Data {
field1: string;
field2: boolean;
}
let a = func("Hi")<Data>({
field1: "",
field2: true
})
let b = func("Hi")<Data>({
field1: 1, // err
field2: true
})
推荐阅读
- sql - Oracle 中的 Clob 数据提交替换问题
- node.js - Nodejs - HTTP 响应如何总是命中正确的设备?
- c# - Web api 调用在 dll 函数中丢失
- python - 如何通过此代码创建命令行工具来执行此操作
- wordpress - Wordpress:执行 cron es 时如何触发函数(myTheme/functions.php)?
- c++ - 随机字符串问题,错误:未捕获“变量”
- algorithm - 如果一个函数在一秒钟内被调用超过一百万次,打印一个错误
- jquery - FadeIn on scroll : 滚动 jQuery 的滞后
- kotlin - 追加新值时未调用列表设置器
- python - 如何在空格,特殊字符之前和之后提取字符串?