は、私はtypescriptですコンパイラがgetThings_concat
とgetThings_nocats
の両方で失敗することを期待しかし、それは後者のみ文句を言う:私は2つのエラー(のための1つを期待するもののここなぜ文字列は配列から構築されたときに配列の型について文句を言わないのですか?次のコードで
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;
}
は、1つのコンパイラエラーです各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; }'.
は、私が何を私が[].concat
を使用できるようにgetThings_concat
に変更するが、ときthings2()
戻っ非IThing
のそれは文句を言うことができますか?
なぜ[[] .concat'を書いていますか? 'concat'は元の配列を変更しません。 'things1()。concat(things2())'を安全に書くことができます。あるいは '[... things1()、... things2()]'と書くだけです。 –
@RyanCavanaugh私は可読性のために 'things1()。concat(things2())'が好きではありません( 'things1'が特別に見えるようにしました。)最後の方がよかったです。ありがとうございました – iffy