interface DataGeneric {
value: number;
}
function transform<D extends DataGeneric>(data: DataGeneric[], get_value: (record: D) => number) {
// Works without error
let values = data.map(get_value);
// Following line errors with:
// Argument of type 'DataGeneric' is not assignable to parameter of type 'D'.
//
values = data.map(d => get_value(d));
// Works without error, but why us type assertion needed?
values = data.map(d => get_value(d as D));
}
get_value
に単一の値を渡すときに型アサーションが必要なのはなぜですか?ジェネリック型はmapの関数引数で動作しますが、単一の値ではありません
活字体2.3.4
あなたが求めていたことは?なぜあなたは元のコードにタイプアサーションが必要なのかを説明しなかったので –
@NitzanTomerそれは本当に私が求めていたものではありません...私は答えとして投稿した解決策を見つけましたが、あなたはデータを 'D []'と定義しなければならないか、質問に示すように 'd as D'が必要なのです。 「あなたはなぜ型アサーションが必要なのか説明しなかった」と言って、 'd as D 'の型アサーションを使用しないとエラーが発生します:「型' DataGeneric 'の引数は型' D ' 'D extends DataGeneric'にもかかわらず。 – AJP