Older/TypeScript2016.3/app.ts (45 lines of code) (raw):
// 20163 TypeScript: numeric literals
type Bit = 0 | 1;
var bit: Bit;
bit = 0b0;
bit = 0x1;
bit = 0o2;
// 20163 TypeScript: enum literals
enum Status { Success, Fail }
interface ISuccessfulResult {
status: Status.Success;
response: string;
}
interface IFailureResult {
status: Status.Fail;
errorCode: number;
}
type AnyResult = ISuccessfulResult | IFailureResult;
declare function getErrorMessage(code: number): string;
function failOnUnknownResponse(response: never) {
throw new Error(`Unknown response: ${response}`);
}
function processResponse(response: AnyResult) {
if (response.status===Status.Success) {
alert(`Hi, ${response.response}!`);
return;
}
if (response.status === Status.Fail) {
alert(`Error requesting name: ${getErrorMessage(response.errorCode)}`);
return;
}
failOnUnknownResponse(response);
}
// 20163 TypeScript: mutual type discriminators
function compareResults(result1: AnyResult, result2: ISuccessfulResult) {
if (result1 === result2) {
alert(`Both are successful! ${result1.response} ${result2.response}`);
}
}
// 20163 TypeScript: 'Surround with type guard' quick fix
// here you can use a quick fix to surround with type guard so that the property is available
function processResponseDifferently(response: ISuccessfulResult | IFailureResult) {
alert(`My result is ${response.response}`);
}
function processOurResult(result: string | number) {
var length = result.length;
}
// 20163 TypeScript: Encapsulate Field refactoring
class SomeClass {
someField: string;
}