typescript - 有条件的需要打字稿
问题描述
所以我有一个有两个参数的函数
第一个参数是选择变体名称,它是必需的,第二个参数是首选项,如果首选项有未定义的类型我想要的是它应该只填充第一个参数,不需要在第二个参数中输入 undefined
这是我的代码
type VariantTypes = {
Apple: {
amount: number
},
Air: undefined
}
function Spawn<variant extends keyof VariantTypes>(variant: variant, prefs: VariantTypes[variant]) {
}
Spawn('Apple', {
amount: 7
})
Spawn('Air') // Second parameter has undefined type, it should not warn me an error if I fill only the first params
Spawn('Air', undefined) // I have to do this, but this is not what I want when second param has undefined type
解决方案
type Args<T, K extends keyof T = keyof T> = K extends unknown
? T[K] extends undefined
? [K]
: [K, T[K]]
: never
type VariantTypesArgs = Args<VariantTypes> // ["Apple", { amount: number }] | ["Air"]
然后你只需要用这种类型输入你的函数参数:
declare function Spawn(...args: [...Args<VariantTypes>]): void
推荐阅读
- c++ - 初始化可变数据结构中的共享指针向量
- php - 使用php从另一个网站获取数据
- laravel - Laravel 迁移返回“外键约束不正确”形成错误
- r - R中两个数据框之间的相关图(相关热图)
- xml - 检查 XML 是否存在特定键
- node.js - 松弛的文件。节点中的上传失败并出现 invalid_arg_name
- python - Python 3 导入 keras 失败
- r - 从R中的字符向量中删除字符字符串
- python - 用 ndarray2 中的列填充 ndarray1,同时跳过 ndarray1 中的某些列索引
- mysql - SQL @x := @x +1 和 @x := 0 是什么意思?