Q:

Javascript that is syntactically invalid Typescript

I find it slightly annoying that some normal javascript features are not syntactically correct in typescript.
Especially adding properties to empty objects, like in this example, is not possible, because Typescript assumes the empty object to be of Type '{}' without any properties. 
var a = {};

a.property = 1; // Error

To solve this, I have to define the empty object to be of an indexable type.
var b: { [x:string] : any} = {};

b.property = 1;

Is there a workaround?

A:

Syntactically the code is correct, semantically it is incorrect. You can still emit the Javascript even with this error, and by default Typescript will do so if you only have semantic errors (mismatched types, extra properties, etc)
Typescript checks that you are consistent with the types you assign to an object, and the type is determined on first assignment. 
You could do one of several things, one of the you already discovered, this allows you to set any property on the object:
var b: { [x:string] : any} = {};

You could explicitly declare the properties that are part of the object if the property set is known:
var b: { property?: string } = {};

Or if you don't want to bother with types at all you could use any:
var b: any = {};

The last one is not really recommended as you forgo all type checking. The second one is the best one, you will restrict all properties to their correct types, and you ensure nothing extra is added to the object. The first one is good if the properties of the object are not known at runtime.
If you reuse the same type multiple times, you can use an interface:
interface TypeOfB { property?: string } 
var b: TypeOfB = {}

