TypeScript/tests/cases/conformance/controlFlow/definiteAssignmentAssertions.ts
Anders Hejlsberg 54d35b926a Add tests
2017-11-20 15:08:24 -08:00

80 lines
1.4 KiB
TypeScript

// @strict: true
// @declaration: true
// Suppress strict property initialization check
class C1 {
a!: number;
b: string; // Error
}
// Suppress definite assignment check in constructor
class C2 {
a!: number;
constructor() {
let x = this.a;
}
}
// Definite assignment assertion requires type annotation, no initializer, no static modifier
class C3 {
a! = 1;
b!: number = 1;
static c!: number;
}
// Definite assignment assertion not permitted in ambient context
declare class C4 {
a!: number;
}
// Definite assignment assertion not permitted on abstract property
abstract class C5 {
abstract a!: number;
}
// Suppress definite assignment check for variable
function f1() {
let x!: number;
let y = x;
var a!: number;
var b = a;
}
function f2() {
let x!: string | number;
if (typeof x === "string") {
let s: string = x;
}
else {
let n: number = x;
}
}
function f3() {
let x!: number;
const g = () => {
x = 1;
}
g();
let y = x;
}
// Definite assignment assertion requires type annotation and no initializer
function f4() {
let a!;
let b! = 1;
let c!: number = 1;
}
// Definite assignment assertion not permitted in ambient context
declare let v1!: number;
declare var v2!: number;