LoginSignup
3
1

More than 1 year has passed since last update.

【TypeScript】TypeScript の Generics型のUtility

Posted at

Generics型のUtility

  • TypeScriptのみに存在する、Generics型のUtilityが存在します
  • コンパイルすると削除されるが、コンパイル中に型チェックを行ったり型チェックを緩めたりできます
    • Partial型
    • Readonly型 など
interface CourseGoal {
  title: string;
  description: string;
  completeUntil: Date;
}

//CourseGoalオブジェクトを返す関数
function createCourseGoal(title: string, description: string, date: Date,): CourseGoal { 
  return { 
     title: title,
     description: description,
     completeUntil: date,
   };
}

  • ここで、TypeScriptでは、新しいオブジェクトを作成して、存在しないプロパティを追加することができません
function createCourseGoal(
  title: string,
  description: string,
  date: Date,
): CourseGoal {
  let courseGoal = {};  //新しいオブジェクトプロパティを追加することができない!
  courseGoal.title = title;
  courseGoal.description = description;
  courseGoal.completeUntil = date;
  return courseGoal as CourseGoal;
}


//CourseGoalの型には、{}をセットできない
  let courseGoal: CourseGoal = {};  

Partial型

  • そこで、 Partial型を使うことで、最終的にはT型になるが、途中は、独自の型をくるんで任意のoptionalのプロパティに変更します
  • 空のオブジェクトをセットして、プロパティをセットできます!
function createCourseGoal(
  title: string,
  description: string,
  date: Date,
): CourseGoal {
  let courseGoal: Partial<CourseGoal> = {};  //CourseGoalの型には、{}をセットできない
  courseGoal.title = title;
  courseGoal.description = description;
  courseGoal.completeUntil = date;
  return courseGoal as CourseGoal; // CourseGoalにキャストして返す
}

Readonly型

  • 値を追加しないようにしたい時に使います
//読み取り専用の文字列を宣言
const names: Readonly<string[]> = ['Cat', 'Dog'];
//names.push('Bird');  //コンパイルエラー
//names.pop();  //コンパイルエラー
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1