Вопрос пользователя:
interface Post {
id: string;
title: string;
}
interface Todo {
id: string;
todo: string;
isReady?: boolean;
}
interface PostsApi {
}
// Опишите интерфейс PostsApi
interface TodosApi {
}
// Опишите интерфейс TodosApi
// Имплементируйте в классе интерфейсы PostsApi и TodosApi
class Api implements PostsApi, TodosApi {
private idCounter: number;
protected posts: Post[];
protected todos: Todo[];
constructor() {
this.idCounter = 0;
this.posts = [];
this.todos = [];
}
protected makeId() {
return String(this.idCounter++);
}
getPosts(limit: number = 5, offset: number = 0) {
return this.posts.slice(offset, limit);
}
makePost(title: string) {
const post = {
id: this.makeId(),
title,
}
this.posts.push(post);
return post;
}
updatePost(id: string, data: Post) {
const post = this.posts.find(post => post.id === id);
if (post) {
Object.assign(post, data);
}
}
deletePost(id: string): void {
this.posts = this.posts.filter(post => post.id !== id);
}
getTodos(): Todo[] {
return this.todos;
}
newTodo(todo: string): Todo {
const todoItem = {
id: this.makeId(),
todo,
}
this.todos.push(todoItem);
return todoItem;
}
readyTodo(id: string): void {
const todo = this.todos.find(todo => todo.id === id);
if (todo) {
todo.isReady = true
}
}
}
function renderPosts(api: PostsApi) {
const posts = api.getPosts();
return posts.map((post, index) => `${index + 1}. ${post.title}`);
}
function renderTodos(api: TodosApi) {
const todos = api.getTodos();
todos.sort((first, second) => {
if (!first.isReady && second.isReady) {
return -1;
}
return 1;
});
return todos.map(item => `[${item.isReady ? 1 : 0}] ${item.todo}`);
}
const myApi = new Api();
myApi.makePost('Как сесть на шпагат русалке');
myApi.makePost('Дружба с Кощеем: за и против');
myApi.makePost('Три богатыря (не меньше)');
console.log(renderPosts(myApi));
myApi.newTodo('Погладить носки');
myApi.newTodo('Покрасить траву');
const { id } = myApi.newTodo('Вдохнуть воздуха');
myApi.readyTodo(id);
console.log(renderTodos(myApi));
Ответ нейросети:
Пройдите быструю авторизацию для просмотра: Войти через Google
Войти через Яндекс
Войти через VK
interface PostsApi {
getPosts(limit?: number, offset?: number): Post[];
makePost(title: string): Post;
updatePost(id: string, data: Post): void;
deletePost(id: string): void;
}
interface TodosApi {
getTodos(): Todo[];
newTodo(todo: string): Todo;
readyTodo(id: string): void;
}