Как правильно поставить тип параметру?
interface TodoItem {
    id: number
    subtitle: string
    important: boolean
    done: boolean
}

const generalToggle = (arr: TodoItem[], id: number, propertyName: keyof TodoItem) => {
        const idx = arr.findIndex((item) => item.id === id);
        const oldItem = arr[idx];
        const value = !oldItem[propertyName];

        const item = {...arr[idx], [propertyName]: value};
        return [
            ...arr.slice(0, idx),
            item,
            ...arr.slice(idx + 1)
        ];
    };

А еще лучше, храните TODO объектом по ключам (для мутаций) и отдельно список IDs (для рендера списка), чтобы O(n) не гонять на каждое изменение.
interface TodoItem {
    id: number
    subtitle: string
    important: boolean
    done: boolean
}

const generalToggle = (arr: TodoItem[], id: number, propertyName: keyof TodoItem) => {
        const idx = arr.findIndex((item) => item.id === id);
        const oldItem = arr[idx];
        const value = !oldItem[propertyName];

        const item = {...arr[idx], [propertyName]: value};
        return [
            ...arr.slice(0, idx),
            item,
            ...arr.slice(idx + 1)
        ];
    };

А еще лучше, храните TODO объектом по ключам (для мутаций) и отдельно список IDs (для рендера списка), чтобы O(n) не гонять на каждое изменение.