【发布时间】:2019-03-13 03:15:59
【问题描述】:
我有这个:
type Two = {
one: number,
two: string,
three: boolean
}
我希望它创建一个看起来像这样的类型:
type RenamedTwo = {
one: number,
two: string,
four: boolean // difference
}
试图以这种方式创建它:
type Rename<T, K extends keyof T, N> = Pick<T, Exclude<keyof T, K>> & { [N]: T[K] }
尝试使用这种方式:
type Renamed = Rename<Two, 'three', 'four'>
但 TSlint 将 [N] 标记为错误并给出以下错误消息:
[ts] 类型文字中的计算属性名称必须引用其类型为文字类型或“唯一符号”类型的表达式。 [ts] 'N' 仅指类型,但在这里用作值。
【问题讨论】:
-
如果有人想重命名多个属性,这里是类型定义:
type Rename<T, K extends keyof T, N extends string> = Pick<T, Exclude<keyof T, K>> & Record<N, valueof<Pick<T, K>>>
标签: typescript