作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有一种方法可以在不使用 @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;
})();
我不确定如果没有 type assertion 是否有办法做到这一点, 尽管。添加 custom type guard而不是类型断言将需要考虑类型保护失败的路径,因此 x
最终也可以是 undefined
或其他取决于该路径的方式处理。
关于arrays - 如何在 typescript 中使用具有对象属性的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69816914/
我是一名优秀的程序员,十分优秀!