0

我正在尝试使用一个将索引作为参数的函数,其中键限制为 T 的键

function aliasSet<T>(values: {[x:keyof T]:string})
//compiler error: An index signature parameter type must be 'string' or 'number'

有没有办法做到这一点?这是正确的方法吗?

4

1 回答 1

2

索引签名参数只能是numberor string(甚至不能number | string

您正在寻找映射类型,特别是Record映射类型:

function aliasSet<T>(values: Record<keyof T, string>)

前任:

declare function aliasSet<T>(values: Record<keyof T, string>) : void;
interface O {
    foo: number,
    bar?: boolean
}

aliasSet<O>({
    bar: "", // Record erases optionality, if you want all to be optional you can use Partial<Record<keyof T, string>>
    foo: ""
})
于 2019-05-23T10:50:08.103 回答