Typescript:只能从对象类型创建排列类型 函数foo(t:t):t{ 返回{ …t//错误:[ts]只能从对象类型创建排列类型。 } }
我知道github上存在一些问题,但我不知道什么是固定的,什么不是,他们有2695个未解决的问题。所以我在这里发帖。我正在使用最新的Typescript 2.9.2Typescript:只能从对象类型创建排列类型 函数foo(t:t):t{ 返回{ …t//错误:[ts]只能从对象类型创建排列类型。 } },typescript,Typescript,我知道github上存在一些问题,但我不知道什么是固定的,什么不是,他们有2695个未解决的问题。所以我在这里发帖。我正在使用最新的Typescript 2.9.2 上述代码是否应该不起作用?如果可能的话,我如何修复它?这在TypeScript 3.2版中已修复。看 看起来还不支持泛型类型的spread,但它存在一个GitHub问题: 目前,您可以使用以下选项之一: Typescript的3.2版修复了这个问题。改进排列和静止参数处理的两个PRs是: 您现在可以使用npm安装来试用它t
上述代码是否应该不起作用?如果可能的话,我如何修复它?这在TypeScript 3.2版中已修复。看
看起来还不支持泛型类型的spread,但它存在一个GitHub问题: 目前,您可以使用以下选项之一:
Typescript的3.2版修复了这个问题。改进排列和静止参数处理的两个PRs是:
npm安装来试用它typescript@3.2
在3.2中,您的代码按原样工作
版本3.2已于2018年11月29日发布,您可以阅读更多信息。您可以使用空白的花括号{}或类似以下示例的界面:
function foo<T extends object>(t: T): T {
return Object.assign({}, t);
}
或
这个答案可能有助于在使用angular和firestoe时解决相同的问题
返回{id:item.payload.doc.id,
…item.payload.doc.data()}
作为员工
这会使他犯同样的错误。对于修复,您必须像这样进行更改
返回{id:item.payload.doc.id,
…item.payload.doc.data()作为雇员}
如果在3.2版之后仍然出现此错误,则可能存在“上游”类型错误,导致对象为未知对象,而不是实际对象。例如,如果您有扩展表达式{…getData()}
,但是getData
函数有编译错误,您可能会看到此错误
因此,请检查浏览器控制台中是否存在任何编译器错误,因为最终错误可能具有误导性。看起来它无法正确地将
t
转换为对象。尝试函数foo(t:t):t{return{…(t as object)}as t;}
,这很奇怪,但效果很好。现在我将使用Object.assign。谢谢你知道吗,正如tslint
所说的:[tslint]使用对象扩展运算符。
:'(@CliteTailor因此,如果您不喜欢,请更改lint规则。linter应该帮助您建立某些规则,而不是阻止您编写您想要编写的内容。我使用的是版本3.7.3
,但仍然发生在TypeScript 4.2中,并且仍然面对相同的规则。我将…(t作为记录)
按照皮棉匠的建议将皮棉穿过@@并在11月最后一天发布:这是更干净的方法吗?
function foo<T extends object>(t: T): T {
return { ...(t as object) } as T;
}
function foo<T extends object>(t: T): T {
return Object.assign({}, t);
}
goodsArray.map(good => {
return {
id: good.payload.doc.id,
...good.payload.doc.data() as {}
};
});
goodsArray.map(good => {
return {
id: good.payload.doc.id,
...good.payload.doc.data() as Goods // 'Goods' is my interface name
};
});