Partial and Required

type Todo = {
  title: string;
  completed?: boolean;
  address?: {
    street?: string;
  };
};

type RequiredPick<T, Key extends keyof T> = Required<Pick<T, Key>> & T;

type PartialPick<T, Key extends keyof T> = Partial<Pick<T, Key>> & Omit<T, Key>;

type RequiredTodoForm = RequiredPick<Todo, "address" | "completed">;

type PartialFormTodo = PartialPick<Todo, "title">;

const test: Required<Todo> = {
  title: "Foo",
  completed: true,
  address: {
    street: "Bar",
  },
};

const requiredTodo: RequiredTodoForm = {
  title: "Hello World",
  completed: true,
  address: {
    street: "test",
  },
};

const partialTodo: PartialFormTodo = {
  completed: true,
};