我的简化代码块如下所示
interface A {
val: string;
// Other optional parameters
}
function usingObject(obj: A) {
return obj.val
}
function usingVal(val: Pick<A, 'val'>) {
return usingObject({ val })
}
我遇到以下错误
Type 'Pick<A, "val">' is not assignable to type 'string'.ts(2322)
我想要一个可以接受对象和其他将每个强制参数作为参数的函数
答案 0 :(得分:2)
可能我们应该对您的usingObject
实施有更多了解,但是以下内容对我有用:
function usingVal(val: Pick<A, 'val'>) {
return usingObject(val)
}
答案 1 :(得分:1)
Pick<A, 'val'>
的结果类型与interface A
基本上相同。换句话说,Pick<...>
constructs a new object type。
以下内容似乎对您有用:
function usingVal(val: string) {
return usingObject({ val })
}
答案 2 :(得分:0)
这是因为 Pick
返回的是 { key: type }
而不仅仅是 type
。
在这种情况下
interface A {
val: string;
}
Pick<A, 'val'>
// returns -> { val: string }
// but not -> string
所以你要做
function usingVal({ val }: Pick<A, 'val'>) {
return usingObject({ val })
}
or
function usingVal(val: Pick<A, 'val'>) {
return usingObject({ val: val.val })
}