gpt4 book ai didi

arrays - 如何在 typescript 中使用具有对象属性的数组

转载 作者:行者123 更新时间:2023-12-04 14:01:39 25 4
gpt4 key购买 nike

有没有一种方法可以在不使用 @ts-ignore 的情况下使用具有对象属性的数组

假设我有这个函数,它尝试将数组转换为具有 prop 属性的数组。这工作正常,除了他们是 @ts-ignore

    const addPropToArray = <T extends unknown>(x: T[]): T[] & {prop: number} => {
//@ts-ignore
const y: T[] & {prop: number} = [...x];
y.prop = 3;
return y
};

显然我不能这样做

const x: string[] & {prop:number} = // what could go here

这就是我考虑使用该函数的原因,但即便如此,该函数也必须有一个 @ts-ignore

具有对象属性的数组是不是一个糟糕的主意以至于 typescript 没有尝试很好地支持它们,或者它们是我缺少的东西?

也许他们是这个可行的变体?

const x: string[] & {prop:number} = {...["a","b","c"], prop: 4}

显然这里的问题是它不再是一个数组。

编辑:我意识到我可以直接转换值而不是使用 @ts-ignore 但那个窗台似乎不是最好的解决方案

最佳答案

Obviously I can't do this const x: string[] & {prop:number} = // what could go here

如果您分配自执行匿名函数的返回值,您就可以这样做。像这样的东西,例如:

interface ArrayProps {
prop: number;
}

const x: string[] & ArrayProps = (() => {
const xPartial: string[] & Partial<ArrayProps> = [];
xPartial.prop = 3;

return xPartial as string[] & ArrayProps;
})();

TypeScript Playground

我不确定如果没有 type assertion 是否有办法做到这一点, 尽管。添加 custom type guard而不是类型断言将需要考虑类型保护失败的路径,因此 x 最终也可以是 undefined 或其他取决于该路径的方式处理。

关于arrays - 如何在 typescript 中使用具有对象属性的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69816914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com