Optimize filterType to only call getUnionType if necessary
This commit is contained in:
parent
e00ce94b94
commit
24d8d848f1
|
@ -8172,9 +8172,26 @@ namespace ts {
|
||||||
}
|
}
|
||||||
|
|
||||||
function filterType(type: Type, f: (t: Type) => boolean): Type {
|
function filterType(type: Type, f: (t: Type) => boolean): Type {
|
||||||
return type.flags & TypeFlags.Union ?
|
if (!(type.flags & TypeFlags.Union)) {
|
||||||
getUnionType(filter((<UnionType>type).types, f)) :
|
return f(type) ? type : neverType;
|
||||||
f(type) ? type : neverType;
|
}
|
||||||
|
let types = (<UnionType>type).types;
|
||||||
|
let length = types.length;
|
||||||
|
let i = 0;
|
||||||
|
while (i < length && f(types[i])) i++;
|
||||||
|
if (i === length) {
|
||||||
|
return type;
|
||||||
|
}
|
||||||
|
let filtered = types.slice(0, i);
|
||||||
|
i++;
|
||||||
|
while (i < length) {
|
||||||
|
const t = types[i];
|
||||||
|
if (f(t)) {
|
||||||
|
filtered.push(t);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
return getUnionType(filtered);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isIncomplete(flowType: FlowType) {
|
function isIncomplete(flowType: FlowType) {
|
||||||
|
|
Loading…
Reference in a new issue