arrays - 如何在打字稿中使用具有对象属性的数组
问题描述
有没有办法在不使用@ts-ignore
typescript的情况下使用具有对象属性的数组
假设我有这个函数,它尝试将数组转换为具有 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
.
具有对象属性的数组是一个糟糕的主意,以至于打字稿不能很好地支持它们,还是我缺少它们?
也许他们的一些变体可以起作用?
const x: string[] & {prop:number} = {...["a","b","c"], prop: 4}
显然这里的问题是它不再是一个数组。
编辑:我意识到我可以只使用值而不是使用@ts-ignore
,但窗台似乎不是最好的解决方案
解决方案
显然我不能这样做
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;
})();
不过,我不确定是否有办法在没有类型断言的情况下做到这一点。添加自定义类型保护而不是类型断言将需要考虑类型保护失败的路径,因此x
最终也能够undefined
或者取决于该路径的处理方式。
推荐阅读
- tensorflow - 用 bazel 构建 tensorflow 不会生成静态库文件?
- angular - 使用@ViewChildren Angular 时得到“未定义”
- javascript - ReactJS:如何在不使用父状态的情况下保持子状态
- java - @Embeddable 的表名
- python - Flask - 请求 URL 时找不到 404
- javascript - 使用 DataTables 引导分页-sm
- javascript - 如何使用 defineProperty JS 获取过滤后的数组?
- github - Github工作流程,即使job.needs成功也不会执行作业
- flutter - 如何更改 DropdownButton 选择的选项颜色?
- c++ - 如何使 Windows(总是最上面的)screenwatermak 类似(Windows 未激活)?