 <blockquote> <p>Couldnt we have avoided the former and done the latter instead?</p> </blockquote> <p>Absolutely. In TypeScript, initializers are not a coding preference, they're a way to ensure that your object fulfills the specification defined by the interface. Crucially, if you add a new non-optional property to your square, the <code>let s: Square = {...</code> variant will <a href="http://www.typescriptlang.org/play/#src=interface%20Square%20%7B%0D%0A%20%20%20%20color%3A%20string%3B%0D%0A%20%20%20%20sideLength%3A%20number%3B%0D%0A%09newProperty%3A%20number%3B%20%2F%2F%20%3C--------%0D%0A%7D%0D%0A%0D%0Alet%20square%20%3D%20%3CSquare%3E%7B%7D%3B%0D%0Asquare.color%20%3D%20%22blue%22%3B%0D%0Asquare.sideLength%20%3D%2010%3B%0D%0A%0D%0Alet%20s%3A%20Square%20%3D%20%7B%20sideLength%3A%2023%2C%20color%3A%20&#39;red&#39;%7D%3B" rel="nofollow">blow up as expected</a>, while the other variant (cast and assign) will be silent. (And of course, someone might accidentally remove or forget to add one of the property assignments, which would again introduce an error of the sort that TypeScript is designed to avoid.)</p> <p>Avoid casting whenever possible. Assuming your dependencies aren't circular (seldom the case), you can always re-write code like this to use initializers. If you want to create an object where some properties may be missing, define those properties as optional in the interface by adding a <code>?</code>:</p> <pre><code>interface Triangle { nonOptional: number; optional?: number; } const t: Triangle = {nonOptional: 1}; // no error </code></pre>