Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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中键入转换元组的函数_Typescript - Fatal编程技术网

如何在Typescript中键入转换元组的函数

如何在Typescript中键入转换元组的函数,typescript,Typescript,可以在Typescript中编写这样的函数吗 type Boxed<T> = { value: T }; function unbox<T>(box: Boxed<T>): T { return box.value; } function unboxTuple<T extends Boxed<unknown>[]>( ...tuple: T ) { return tuple.map(unbox); } co

可以在Typescript中编写这样的函数吗

type Boxed<T> = { value: T };

function unbox<T>(box: Boxed<T>): T {
    return box.value;
}

function unboxTuple<T extends Boxed<unknown>[]>(
    ...tuple: T
) {
    return tuple.map(unbox);
}

const boxedTuple: [Boxed<number>, Boxed<string>] = [
    {value: 4}, {value: "foo"}
];
type-Boxed={value:T};
函数unbox(框:已装箱):T{
返回框.value;
}
函数无结构(
…元组:T
) {
返回tuple.map(unbox);
}
常量boxedTuple:[已装箱,已装箱]=[
{value:4},{value:foo}
];

我觉得这应该是可能的,但此代码不起作用:

您可以更改此代码:

函数取消组合(
元组:T
) {
返回tuple.map(unbox);
}
或者这个:

console.log(unboxTuple(...boxedTuple));

要获取适当的类型,需要使用元组上的映射类型从框中提取每个类型:

type UnboxAll<T extends Record<number, Boxed<any>>> = {
    [P in keyof T]: T[P] extends Boxed<infer V> ? V : never
};
function unboxTuple<T extends Boxed<unknown>[]>(
    ...tuple: T
) {
    return tuple.map(unbox) as UnboxAll<T>
}

const boxedTuple: [Boxed<number>, Boxed<string>] = [
    { value: 4 }, { value: "foo" }
];

let z = unboxTuple(...boxedTuple); // [number, string]
)
键入UnboxAll