interface Tweet{
id:string;
user:string;
body:string;
}
//tweetはTweet型、userはUser型とする
let tw={...tweet,...{user:user}};
この時の変数twの型を定義したい時どうしますか?
素直に書いてみましょう
interface Tweet2{
id:string;
user:User;
body:string;
}
面倒ですね。プロパティが増えるともっと大変です。
typelevel-tsという便利なライブラリがあります。
このライブラリを使うとこう書けます。
import {ObjectOverwrite} from 'typelevel-ts';
type Tweet2=ObjectOverwrite<Tweet,{user:User}>;
これだけです。
というライブラリもあります。
Conditional Types追加以前のこのライブラリは内部でかなり複雑な事をしていてそんな簡単に読めるものじゃなかったのですが、今はかなり読みやすくなりました。
Conditional Typesの勉強にもおすすめです。
https://github.com/gcanti/typelevel-ts/blob/master/src/index.ts