131 lines
2.4 KiB
JavaScript
131 lines
2.4 KiB
JavaScript
var null_tests =
|
|
[
|
|
// typeof expr == typename
|
|
function() {
|
|
var x : ?string = "xxx";
|
|
if (typeof x == "string") {
|
|
var y : string = x; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : ?string = "xxx";
|
|
if ("string" == typeof x) {
|
|
var y : string = x; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:?string} = {p:"xxx"};
|
|
if (typeof x.p == "string") {
|
|
var y : string = x.p; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:{q:?string}} = {p:{q:"xxx"}};
|
|
if (typeof x.p.q == "string") {
|
|
var y : string = x.p.q; // ok
|
|
}
|
|
},
|
|
|
|
// typeof expr != typename
|
|
function() {
|
|
var x : ?string = "xxx";
|
|
if (typeof x != "string") {} else {
|
|
var y : string = x; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:?string} = {p:"xxx"};
|
|
if (typeof x.p != "string") {} else {
|
|
var y : string = x.p; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:{q:?string}} = {p:{q:"xxx"}};
|
|
if (typeof x.p.q != "string") {} else {
|
|
var y : string = x.p.q; // ok
|
|
}
|
|
},
|
|
|
|
// typeof expr === typename
|
|
function() {
|
|
var x : ?string = "xxx";
|
|
if (typeof x === "string") {
|
|
var y : string = x; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:?string} = {p:"xxx"};
|
|
if (typeof x.p === "string") {
|
|
var y : string = x.p; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:{q:?string}} = {p:{q:"xxx"}};
|
|
if (typeof x.p.q === "string") {
|
|
var y : string = x.p.q; // ok
|
|
}
|
|
},
|
|
|
|
// typeof expr !== typename
|
|
function() {
|
|
var x : ?string = "xxx";
|
|
if (typeof x !== "string") {} else {
|
|
var y : string = x; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:?string} = {p:"xxx"};
|
|
if (typeof x.p !== "string") {} else {
|
|
var y : string = x.p; // ok
|
|
}
|
|
},
|
|
|
|
function() {
|
|
var x : {p:{q:?string}} = {p:{q:"xxx"}};
|
|
if (typeof x.p.q !== "string") {} else {
|
|
var y : string = x.p.q; // ok
|
|
}
|
|
},
|
|
];
|
|
|
|
// typeof this.p op typename
|
|
class A {
|
|
p: ?string;
|
|
|
|
ensure0(): string {
|
|
if (typeof this.p == "string")
|
|
return this.p;
|
|
else
|
|
return "";
|
|
}
|
|
|
|
ensure1(): string {
|
|
if (typeof this.p != "string")
|
|
return "";
|
|
else
|
|
return this.p;
|
|
}
|
|
|
|
ensure2(): string | void {
|
|
if (typeof this.p === "string")
|
|
return this.p;
|
|
else
|
|
return "";
|
|
}
|
|
|
|
ensure3(): string | void {
|
|
if (typeof this.p !== "string")
|
|
return "";
|
|
else
|
|
return this.p;
|
|
}
|
|
}
|