patterntypescriptCritical
! operator in typescript after object method
Viewed 0 times
typescriptobjectaftermethodoperator
Problem
I have an object
What does it mean an expression like this one:
I guess the
X with a method getY() returning an object Y with a method a(), in typescript.What does it mean an expression like this one:
X.getY()!.a()I guess the
! operator is used to check against null, but how does it work concretely? Where is defined in the language?Solution
It's called the "Non-null assertion operator" and it tells the compiler that
It's a new typescript 2.0 feature and you can read about it in the what's new page, here's what it says:
A new ! post-fix expression operator may be used to assert that its
operand is non-null and non-undefined in contexts where the type
checker is unable to conclude that fact. Specifically, the operation
x! produces a value of the type of x with null and undefined excluded.
Similar to type assertions of the forms x and x as T, the !
non-null assertion operator is simply removed in the emitted
JavaScript code.
Edit
There's an issue for documenting this feature: Document non-null assertion operator (!)
x.getY() is not null.It's a new typescript 2.0 feature and you can read about it in the what's new page, here's what it says:
A new ! post-fix expression operator may be used to assert that its
operand is non-null and non-undefined in contexts where the type
checker is unable to conclude that fact. Specifically, the operation
x! produces a value of the type of x with null and undefined excluded.
Similar to type assertions of the forms x and x as T, the !
non-null assertion operator is simply removed in the emitted
JavaScript code.
// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
// Throw exception if e is null or invalid entity
}
function processEntity(e?: Entity) {
validateEntity(e);
let s = e!.name; // Assert that e is non-null and access name
}Edit
There's an issue for documenting this feature: Document non-null assertion operator (!)
Code Snippets
// Compiled with --strictNullChecks
function validateEntity(e?: Entity) {
// Throw exception if e is null or invalid entity
}
function processEntity(e?: Entity) {
validateEntity(e);
let s = e!.name; // Assert that e is non-null and access name
}Context
Stack Overflow Q#38874928, score: 170
Revisions (0)
No revisions yet.