Typescript:对象类型到数组类型(元组)

努尔伯·阿尔皮斯巴耶夫(Nurbol Alpysbayev)

我有这个:

interface Obj {
    foo: string,
    bar: number,
    baz: boolean
}

所需的类型是该元组:

[string, number, boolean]

如何将接口转换为元组?

更新:

我最初的问题是:我以声明性的精神构建了一些自以为是的库,用户应在其中使用对象文字描述函数的参数。像这样:

let paramsDeclaration = {
  param1: {
    value: REQUIRED<string>(),
    shape: (v) => typeof v === 'string' && v.length < 10
  },
  param2: {
    value: OPTIONAL<number>(),
    ...
  },
}

然后,库将使用该对象并使用其参数创建一个函数:

   (param1: string, param2?: number) => ...

因此,实现这样的功能不是问题,问题在于正确键入它,以便用户获得良好的代码完成(IntelliSense)。

PS:我知道这是无法解决的,但是知道什么是最可能的解决方法/黑客,这将很有趣。

肖恩·索比

这并不是一个真正的问题的答案,但是由于我实际上并不认为有可能这样做,因此希望这至少在某种程度上有所帮助:

function REQUIRED<T>(): T {
    //...
}
function OPTIONAL<T>(): T {
    //...
}

interface ParamsDeclaration {
    readonly [paramName: string]: {
        readonly value: any;
        readonly shape?: Function;
    };
}

type Func<T> = T extends {
    readonly [paramName: string]: {
        readonly value: infer U;
    };
} ? (...params: Array<U>) => void
    : never;

function create<T extends ParamsDeclaration>(paramsDeclaration: T): Func<T> {

    // ...
}

const paramsDeclaration = {
    param1: {
        value: REQUIRED<string>(),
        shape: (v: any) => typeof v === 'string' && v.length < 10
    },
    param2: {
        value: OPTIONAL<number>(),
        //...
    },
};
// Type is '(...params: (string | number)[]) => void'
const func1 = create(paramsDeclaration);
func1('1', 2); // Ok
func1(2, '1'); // Ok, but I assume not what you want
func1(Symbol()); // TS error

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

TypeScript:元组类型到对象类型

从数组到对象的TypeScript类型

Typescript,合并元组元素的对象类型

Typescript从元组/数组值派生联合类型

Typescript对象类型转换为数组类型

在TypeScript中检测固定长度的元组类型与数组类型

Typescript元组传播类型

Typescript按元组中的对象路径从对象中提取类型

在TypeScript中将任意函数参数推断为对象或元组类型

通过数组扩展TypeScript中的只读元组类型

如何在TypeScript中将数组初始化为元组类型?

从类型的元组到通过调用模板函数返回的值数组

如何从 TypeScript 中的对象数组创建类型?

包含对象的 TypeScript 类型化数组

Typescript-从联合或数组派生对象类型

Typescript数组对象属性值作为类型

如何从具有键数组的对象中获取元组类型

Angular / Typescript找不到类型为“对象”的其他支持对象“ [对象对象]”。NgFor仅支持绑定到数组等Iterables

TypeScript筛选元组类型的任意类型

元组对数组的类型推断

如何在 TypeScript 中将数组类型隐式转换为元组类型?

如何通过TypeScript中的类型描述元组数组中元组元素之间的关系?

是否可以使用对象类型定义来构造新的数组/元组类型?

根据Typescript中的对象数组创建对象类型

TypeScript - 合并到单个对象数组的数组的强类型化

获取特定类型的对象数组到新数组

Typescript对象属性类型

TypeScript对象类型

TypeScript类型数组