我有这个:
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'仅指类型,但在此处被用作值。
答案 0 :(得分:3)
对于重命名的属性,您还需要使用映射类型:
{
"main": "index.js",
"scripts": {
"start": "micro"
},
"dependencies": {
"micro": "^9.3.3",
"si7021-sensor": "0.0.7"
}
}
请注意,如果您提供更多属性,则此操作将无法正常工作:
type Two = {
one: number,
two: string,
three: boolean
}
type Rename<T, K extends keyof T, N extends string> = Pick<T, Exclude<keyof T, K>> & { [P in N]: T[K] }
type Renamed = Rename<Two, 'three', 'four'>