BT

TypeScript 2.0 Beta Brings Option Types, Discriminated Unions, and More

| by Sergio De Simone Follow 21 Followers on Jul 13, 2016. Estimated reading time: 1 minute |

Microsoft’s Daniel Rosenwasser has announced the beta release of TypeScript 2.0, which brings a wealth of new features to the language including non-nullable types, control flow analysis for types and discriminated unions.

Non-nullable types aim to solve the most common source of bugs in JavaScript, says Rosenwasser: null and undefined. Non-nullable types forbid assigning null to a variable, unless it is declared as an option type:

let foo1: string = null; // Error!
let foo2: string | null = null; // Option type

As shown above, option types are specified as union types, another new feature in TypeScript 2.0. Optional parameters and properties are automatically inferred as belonging to option types. Option types can be used either through the ! operator, or through type guards:

let s: string | undefined = "string"; // Okay
if (s) {
    f(s);
}
let upperCase = s!.toUpperCase(); // Okay
let lowerCase = foo2.toLowerCase(); // Error

Non-nullable types are enabled in TypeScript 2.0 by using the --strictNullChecks flag.

TypeScript 2.0 also introduces control flow based type analysis for local variables and parameters. This represents a major improvement to TypeScript type analysis and extends pre–2.0 type analysis by including the effects of assignments and control flow constructs, e.g., return, break, etc.

New in TypeScript 2.0 are also private and protected constructors which can be declared using the private and protected keywords. Furthermore, properties can now be abstract, which forces subclasses to provide a definition for their accessors:

abstract class A {
  abstract p;
}
class B extends A {
  get p() {...}
  set p(v) {...}
}

In addition to the null and undefined types mentioned above, TypeScript 2.0 also introduces a new never type, which represents the types of a value that never occur, such as a function that never returns, or a variable under a guard that can never be true:

// Function returning never must have unreachable end point
function error(message: string): never {
    throw new Error(message);
}

There are more new features in TypeScript 2.0, such as read-only properties and index signature, specifying the type of implicit this argument to functions, module resolution enhancement, and many more.

To install TypeScript 2.0 beta, you can download it for Visual Studio 2015 (which will require VS 2015 Update 3). Alternatively, you can run npm install -g typescript@beta.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss
BT