type Json = string | number | boolean | null | { [ property ] : Json ; } | Json [ ] ; let obj1 = 1 ; let obj2 = "string" ; let obj3 = { } ; let obj4 = [ ] ; let obj5 = { foo : [ ] , bar : true , } ; { type Json = string | number | boolean | null | JsonObject | JsonArray ; type JsonObject = { [ property ] : Json ; } ; interface JsonArray extends Array < Json > { } }