打字稿选择问题

时间:2020-02-14 22:39:17

标签: typescript typescript-generics

我的简化代码块如下所示

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)

我想要一个可以接受对象和其他将每个强制参数作为参数的函数

3 个答案:

答案 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 })
}