
Inline adoc files when they are included exactly once. Also fix language tags because this inlining gives us better information on what language the code is written in.
73 lines
1.5 KiB
Plaintext
73 lines
1.5 KiB
Plaintext
== Why is this an issue?
|
|
|
|
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)
|
|
|
|
=== Message
|
|
|
|
Remove this unnecessary [cast|not-null assertion].
|
|
|
|
|
|
=== Highlighting
|
|
|
|
The cast or not-null assertion.
|
|
|
|
|
|
'''
|
|
== Comments And Links
|
|
(visible only on this page)
|
|
|
|
=== on 14 Nov 2017, 20:56:16 Ann Campbell wrote:
|
|
\[~jeanchristophe.collet] "and when property values set at type definition are checked" is not clear to me. Would it be fair to reword to something like:
|
|
|
|
|
|
____
|
|
inside conditions that test the object type, either with ``++.kind++`` or ``++instanceof++``
|
|
|
|
____
|
|
?
|
|
|
|
endif::env-github,rspecator-view[]
|