1) Методы completedTask и uncompletedTask практически одинаковые. Объедините их и в объединенный метод передавайте аргумент.
2)
const toDoParent = document.querySelector("#todo-block");
Часто у вас встречается. Нет никакого смысла так делать. Вынесите в конструктор
3) localStorage.setItem и localStorage.getItem нужно вынести в отдельную абстракции ввиде класса Storage с методами get и set.
4) Вам стоит выделить как минимум три сущности ToDoList - он будет вызывать ToDo и Storage
ToDoList - создает новую задачу (new ToDo) и общается с хранилищем (Storage)
ToDo - знает как только создать отдельную dom ноду в зависимости от переданных параметров и возвращает эту ноду,
Storage - работает с хранилищем, записывает в него или читает, в данном случае это localStorage, а может быть что-то другое. Например заходите писать в куки. Вы меняете реализацию методов set и get и приложение в лице ToDoList все также продолжит работать. Так как ему не важна реализация Storage, а важен лишь интерфейс к нему (get и set)