TypeScriptにおける入力型と同じ戻り値の型
私は、同じことを行う2つの関数を持っていますが、入力の型と返り値の型が異なるだけです。これらの関数を1つに「統合」する方法について考えていて、そのアイデアの1つとしてユニオン型を使うことがありました。しかし、私の制約は、入力がユニオンの1つの要素である場合、返される値も同じでなければならないということです。
const getViewStyle = (styles: ViewStyle[]): ViewStyle => {
return Object.assign({}, ...styles);
};
const getTextStyle = (styles: TextStyle[]): TextStyle => {
return Object.assign({}, ...styles);
};
回答 #1
あなたはこれをすることができます:
const flattenObjectsToSingle = <T>(items: T[]): T => { ...
回答 #2
ジェネリックと推論された型の組み合わせが最適です。受け入れられた回答では、関数を使用している時に特定の型が返されることを期待している場合、TypeScriptのリンターが文句を言い続けることになります。
ですので、私の意見では、これが最良の答えだと思います。
const getStyle = <T extends TextStyle | ViewStyle >(styles: T[]): T => {
return Object.assign({}, ...styles);
};
基本的にこれは、この関数は TextStyle または ViewStyle の配列を期待し、与えられた型のレコードを1つ返すということを意味しています。
クレジットはBen AwadのYouTubeビデオにあります: https://www.youtube.com/watch?v=nViEqpgwxHE
