@er1n because javascript (and php?) people were mad they couldn't do js.type and had to do js['@type']
In fact some people wanted to oppose json-ld altogether for this silly reason, so the alias was done, which is considered "best practice" these days for that very reason by many
IMO it would be better to use the @, I think it's a good signal that it's different than other attributes in that it's not a normal property