在下面的代码中,我希望TypeScript编译器在.json()
和getThings_concat
上都失败,但它只会抱怨后者:
getThings_nocats
这是一个编译器错误,但我预计会有两个错误(每个interface IThing {
name: string;
}
function things1() {
return [
{name: 'bob'},
{name: 'sal'},
]
}
function things2() {
return [
{garbage: 'man'},
]
}
function getThings_concat():Array<IThing> {
return <Array<IThing>>([].concat(things1(), things2()));
}
function getThings_nocats():Array<IThing> {
let ret:Array<IThing> = [];
things1().forEach(thing => {
ret.push(thing);
});
things2().forEach(thing => {
ret.push(thing);
});
return ret;
}
函数一个错误):
getThings_*
我可以在test.ts(24,18): error TS2345: Argument of type '{ garbage: string; }' is not assignable to parameter of type 'IThing'.
Property 'name' is missing in type '{ garbage: string; }'.
更改哪些内容,以便我可以使用getThings_concat
,但在[].concat
返回非things2()
时让它抱怨?
答案 0 :(得分:0)
通过将var arr = [ 1, 5, 9, 21 ],
pairs = arr.reduce((p,c,i) => i == 1 ? [[p,c]] : p.concat([[p[p.length-1][1],c]]));
console.log(pairs);
的类型从[]
更改为any[]
,这将为您提供所期望的错误:
IThing[]
然而,以这种方式编写函数会好得多,不需要任何类型的断言
function getThings_concat():Array<IThing> {
return (<IThing[]>[]).concat(things1(), things2());
}