Я не понимаю, почему компилятор TypeScript жалуется на этот код:
import { useState, useEffect } from 'react'; function useSomething<T extends { [key: string]: any }>(): T { const [state, setState] = useState<T>({}); // Argument of type '{}' is not assignable to parameter of type 'T | (() => T)'. useEffect(() => { setState({ hello: 'world' }); }); return state; }
Поскольку в основном этот код работает: const t: { [key: string]: any } = { hello: 'world' }.
const t: { [key: string]: any } = { hello: 'world' }
Пример игровой площадки: https://www.typescriptlang.org/play/?ssl=14&ssc=36&pln=14&pc=52#code / JYWwDg9gTgLgBAbzgVwM4FMDKMCGN0A0KGAogGZnoDG8AvnGVBCHAORTo42sDcAUHzLIAdjWARhxLM3QwAFsGEBzADwAVOOgAe + YQBNUiOAG0A1ugCeALjioYURUoC6NnMItxaAPgAUAShsNBD44OCoJOxM7PEJb WWwYpzgAXikE-HVfBFo-fhCpckoaH38Ur0R80IwYdPQfJDl0ABsmiBtWAHdoJr1WT1z8nLzQjhhkKElo-H5aAT5w4UiYGyQzSxs7B2UXODcPelTs-gWlgCYVk3NrW3tHHb3PFKNGlra2LqgevtoeIA
Несколько комментариев о коде:
T
{}
useComplexState<boolean>
useComplexState()
Record<string, any>
state
Добавление as T в useState<T>({} as T) исправляет каждую проблему.
as T
useState<T>({} as T)