56 lines
1.1 KiB
Plaintext
56 lines
1.1 KiB
Plaintext
The TypeScript compiler automatically casts a variable to the relevant type inside conditionals where it is possible to infer the type (because ``++typeof++``, ``++instanceof++``, etc was used). This compiler feature makes casts and not-``++null++`` assertions unnecessary.
|
|
|
|
|
|
== Noncompliant Code Example
|
|
|
|
[source,javascript]
|
|
----
|
|
function getName(x?: string | UserName) {
|
|
if (x) {
|
|
console.log("Getting name for " + x!); // Noncompliant
|
|
|
|
if (typeof x === "string")
|
|
return (x as string); // Noncompliant
|
|
else
|
|
return (x as UserName).name; // Noncompliant
|
|
}
|
|
return "NoName";
|
|
}
|
|
----
|
|
|
|
|
|
== Compliant Solution
|
|
|
|
[source,javascript]
|
|
----
|
|
function getName(x?: string | UserName) {
|
|
if (x) {
|
|
console.log("Getting name for " + x);
|
|
|
|
if (typeof x === "string")
|
|
return x;
|
|
else
|
|
return x.name;
|
|
}
|
|
return "NoName";
|
|
}
|
|
----
|
|
|
|
|
|
ifdef::env-github,rspecator-view[]
|
|
|
|
'''
|
|
== Implementation Specification
|
|
(visible only on this page)
|
|
|
|
include::message.adoc[]
|
|
|
|
include::highlighting.adoc[]
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
include::comments-and-links.adoc[]
|
|
endif::env-github,rspecator-view[]
|