Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
递归地将TypeScript类型设置为非只读,而不删除元组 export type DraftObject={-readonly[P in keyof T]:Draft} 导出接口DraftArray扩展数组{} 导出类型Draft=T扩展任何[] ? 德拉夫塔里 :T扩展只读阵列 ? 德拉夫塔里 :T扩展对象?绘图对象:T 类型tup=[number,number,number,number] 常数T:Draft=[1,2,3,4] 常量U:tup=[1,2,3,4] 常数TT:tup=T 常数UU:Draft=U_Typescript - Fatal编程技术网

递归地将TypeScript类型设置为非只读,而不删除元组 export type DraftObject={-readonly[P in keyof T]:Draft} 导出接口DraftArray扩展数组{} 导出类型Draft=T扩展任何[] ? 德拉夫塔里 :T扩展只读阵列 ? 德拉夫塔里 :T扩展对象?绘图对象:T 类型tup=[number,number,number,number] 常数T:Draft=[1,2,3,4] 常量U:tup=[1,2,3,4] 常数TT:tup=T 常数UU:Draft=U

递归地将TypeScript类型设置为非只读,而不删除元组 export type DraftObject={-readonly[P in keyof T]:Draft} 导出接口DraftArray扩展数组{} 导出类型Draft=T扩展任何[] ? 德拉夫塔里 :T扩展只读阵列 ? 德拉夫塔里 :T扩展对象?绘图对象:T 类型tup=[number,number,number,number] 常数T:Draft=[1,2,3,4] 常量U:tup=[1,2,3,4] 常数TT:tup=T 常数UU:Draft=U,typescript,Typescript,类型DraftObject应返回其所有属性标记为非只读的任何类型。这适用于所有情况,但元组类型除外,元组类型被错误地转换为数组。我如何才能使用特例元组和只读元组,而不是使它们成为DraftArrays?正如jcalz所说,在TypeScript 3.1中没有只读元组。如果您想使所有内容都可变,只需使用: export type DraftObject<T> = {-readonly [P in keyof T]: Draft<T[P]>} export interface

类型DraftObject应返回其所有属性标记为非只读的任何类型。这适用于所有情况,但元组类型除外,元组类型被错误地转换为数组。我如何才能使用特例元组和
只读元组,而不是使它们成为
DraftArray
s?

正如jcalz所说,在TypeScript 3.1中没有只读元组。如果您想使所有内容都可变,只需使用:

export type DraftObject<T> = {-readonly [P in keyof T]: Draft<T[P]>}
export interface DraftArray<T> extends Array<Draft<T>> {}
export type Draft<T> = T extends any[]
    ? DraftArray<T[number]>
    : T extends ReadonlyArray<any>
        ? DraftArray<T[number]>
    : T extends object ? DraftObject<T> : T


type tup = [number, number, number, number]

const T: Draft<tup> = [1, 2, 3, 4]
const U: tup = [1, 2, 3, 4]

const TT: tup = T
const UU: Draft<tup> = U
导出类型Draft={-readonly[P in keyof T]:Draft};

利用TypeScript 3.1中添加的和以前存在的应用于原语的同态映射类型的特殊情况(
Draft
T
为原语时计算为
T

正如jcalz所说,在TypeScript 3.1中没有只读元组。如果您想使所有内容都可变,只需使用:

export type DraftObject<T> = {-readonly [P in keyof T]: Draft<T[P]>}
export interface DraftArray<T> extends Array<Draft<T>> {}
export type Draft<T> = T extends any[]
    ? DraftArray<T[number]>
    : T extends ReadonlyArray<any>
        ? DraftArray<T[number]>
    : T extends object ? DraftObject<T> : T


type tup = [number, number, number, number]

const T: Draft<tup> = [1, 2, 3, 4]
const U: tup = [1, 2, 3, 4]

const TT: tup = T
const UU: Draft<tup> = U
导出类型Draft={-readonly[P in keyof T]:Draft};

利用TypeScript 3.1中添加的和以前存在的应用于原语的同态映射类型的特殊情况(
Draft
T
为原语时计算为
T
)。

如果出于某种原因,需要检测元组和数组之间的差异,您可以使用这样一个事实,即元组类型具有已知的
“0”
键(字符串值,而不是数字
0
),但数组没有:

export type Draft<T> = {-readonly [P in keyof T]: Draft<T[P]>};
type IfTuple=“0”扩展了keyt?Y:N
类型TestTuple=IfTuple;//“元组”
类型TestArray=IfTuple;//“数组”
这应该足以构建一个条件类型,它对元组的作用与对一般数组的作用不同


希望有帮助。祝你好运

如果出于某种原因,需要检测元组和数组之间的差异,可以使用这样一个事实,即元组类型有一个已知的
“0”
键(字符串值,而不是数字
0
),但数组没有:

export type Draft<T> = {-readonly [P in keyof T]: Draft<T[P]>};
type IfTuple=“0”扩展了keyt?Y:N
类型TestTuple=IfTuple;//“元组”
类型TestArray=IfTuple;//“数组”
这应该足以构建一个条件类型,它对元组的作用与对一般数组的作用不同


希望有帮助。祝你好运

FYI目前有(在TS3.1中)。FYI目前有(在TS3.1中)。这非常有用,但我接受了另一个答案,因为它与我的特定场景更相关。非常感谢。这非常有用,但我接受了另一个答案,因为它与我的特定场景更相关。非常感谢。