Попробуйте создать интерфейс для желаемого типа, который задает объединение всех допустимых типов, например:
interface IJson {
[key: string]: number | string | boolean | Array<number | string | boolean | IJson | null> | IJson | null;
}
Редактировать : После некоторых исследований выясняется, что TypeScript фактически предоставляет пример именно этого на их документах . Они рекомендуют это:
type Json =
| string
| number
| boolean
| null
| { [property: string]: Json }
| Json[];
Редактировать 2 : Проверьте мою обновленную (от вашего) песочницу , которая играет с некоторыми из этих вещей. К сожалению, невозможно передать аргумент интерфейса в T, если у интерфейса также нет подписи индекса, что-то вроде { [key: string]: string }
. Вы должны быть в состоянии обойти это, изменив ваш интерфейс на определение типа, например type Type1 = { x: string }
, которое затем должно работать просто отлично. Я знаю, что это не совсем то, что вы искали, но я не уверен, что в настоящее время (или когда-либо будет) поддержка этого в TypeScript.