f235bf7db8
* Remove check narrowing only certain types, add test showing issues with this * string literal case test * Reconcile fix with CFA work * Defaultable -> NotNarrowable to align with use * Missed a defaultable in comments * Add test for narrowing to unions of string literals * Rewrite isInStringLiteral to accomodate for unterminated strings * Refactor signatureHelp to expose helper functions * Add support for completion in string literals * Remove unused check * Use const instead of let * Fix error * Formatting changes * Use shorthand properties * Add failing test for #8738 * Sort baseline reference identifier by name * Detects assignment to internal module export clause, fixes #8738 * add SharedArrayBuffer fix * Factor out assignment op check * Add test for composite assignment * Factor out the behaviour and handles x++ and ++x * Handles ES3 default as identifier name * Fix missing else statement * isNameOfExportedDeclarationInNonES6Module * Reorder options alphabetically * Mark diagnostics, and skipDefaultLibCheck as internal * Allow an import of "foo.js" to be matched by a file "foo.ts" * Improve loadModuleFromFile code * Respond to PR comments * Respond to more PR comments * Fix test * Actually merge from master * Revert to old tryLoad implementation * Run fixupParentReferences when parsing isolated jsDocComment * initial revision of unit test support for project system in tsserver * Allow wildcard ("*") patterns in ambient module declarations * Add non-widening forms of null and undefined * Create separate control flows for property declarations with initializers * Add regression test * Allow trailing commas in function parameter and argument lists * Add tests * Remove unused variable * Add null check and CR feedback * Support shorthand ambient module declarations * Revert "Merge pull request #7235 from weswigham/narrow-all-types" This reverts commitef0f6c8fe4
, reversing changes made to9f087cb62a
. * reuse the fixupParentReferences function * Improve typing of && operator with --strictNullChecks * Add test * Respond to PR comments * Respond to PR comments * Add merging tests * Use a function `stringify` to simplify calls to `JSON.stringify(xyz, undefined, 2)` * Update tests * Fix mistake * Include indent in navigation bar protocol Previously navbar01 test had indents when run in the browser but not when run from node. Now they run the same. * Remove unnecessary restrictions in property access narrowing * Fix fourslash test * Add regression test * Consider property declarations to be control flow containers * Adding regression test * Remove restriction on --target es5 and --module es6 * change type definition for Object.create * Fix signature help * Add "implicit any" warning for shorthand ambient modules * Remove trailing whitespace * Support using string values in enums for CompilerOptions in transpile methods * Remove trailing whitespace in jakefile * Make `jake runtests-browser` support test regexes with spaces For example: `jake runtests-browser t="transpile .js files"` now works. * Add another test * factor out isJsxOrTsxExtension * Move to a conformance test * Revert "Revert "Merge pull request #7235 from weswigham/narrow-all-types"" This reverts commitfc3e040c51
. * Use inclusive flag, as originally done, but include almost everything * Add additional tests * Respond to PR comments * Fix typo * add tests for tsserver project system * Fix test * Allow case comparison to undefined and null in strict null checking mode * Remove incorrectly added tests * check if moduleResolution when verifying that program can be reused * more tests for module resolution change and exclude * Fix linting issues * Merge JSDoc of assignments from function expressions * Allow nested assignments in type guards * Add tests * Improve order of parameter's merged jsdoc * Force LF newlines for LKG builds/non debug builds Fixes 6630 * Create intersection types in type guards for unrelated types * Split commentsFunction test into expr/decl And renumber. * Remove TODO comments * Accept new baselines * Add tests * Remove comments * Fix test helper * Recognize relative path using in outDir property (#9025) * Recognize relative path using in outDir property * Add projects tests * Add project .json files * Update baselines * Add comments * Add test case The test passes in 1.8 and fails in master. * Return trace when exception happens * Remove Long-Done TODO AFAIK, the harness sources have been concatenated into `run.js` for as long as I've known. This stops executing them twice (and in turn makes debugging tests much easier, since you no longer have to debug into eval'd code). * Allow primitive type guards with typeof on right Previously, only type guards of the form `typeof x === 'string'` were allowed. Now you can write `'string' === typeof x`. * Primitive type guards are now order independent * Fix comments in tests * Add handleing for classes * Add more tests for target=es5 module=es6 * addExportToArgumentListKind * Accept baseline * Add more tests * wip-fixing transforms * Adds progress indicators to the runtests-parallel build task. * Fixed typo * Fix comment * Add test for out-of-range error * Use proper method of not resolving alias * Fix module loading error (commandLineOptions_stringToEnum would be undefined if optionDeclarations wasn't loaded yet) * Port 8739 * Update tests * Update baselines * Contextually type return statement in async function * Remove stale files * Undo change * Improve perf * Improve tests * Fix sourcemaps for debugging tests * Allow --sourceRoot with --inlineSources option Fixes #8445 * this in parameter initializers resolves to class Accept baselines now that the test passes. * Add tests for more kinds of import/export * Fix7334 Disallow async in functionExpression and ArrowFunction (#9062) * Error when using async modifier in function-expression and arrow-function when target es5 * Add tests and baselines * Resolve function-this in parameter initialisers when explicitly provided * Allow null/undefined guard with null/undefined on left Also add a test with baselines. * Code review comments * Update more diagnostic messages ES6->2015 Fix #8996 CC @mhegazy. * Fixes an issue with runtests-parallel when global mocha is not installed. * Update LKG * Add tests * fix baselines * Recommend runtests-parallel in CONTRIBUTING * Only inlineSourceMap when debugging through jake-browser (#9080) * Only inlineSourceMap when debugging through jake-browser * Address PR: fix typo in opt's property * Manually port tests from PR 8470 * minor fix: add missing return clause * Support using string values in enums for CompilerOptions in transpile methods * Support using string values in enums for CompilerOptions in transpile methods # Conflicts: # tests/cases/unittests/transpile.ts * Fix test helper * Add test for out-of-range error * Fix module loading error (commandLineOptions_stringToEnum would be undefined if optionDeclarations wasn't loaded yet) * Use camel-case instead of snake-case (#9134) * Manually add tests for PR 8988 * Allow wildcard ("*") patterns in ambient module declarations * Respond to PR comments * Add another test * Improve perf * Improve tests * Update baseline from merging with master * Address PR comment * Update baseline * Refactor how we retrieve binding-name cache in module transformer * Temporary accept so we get a clean run-tests result
113 lines
No EOL
2.4 KiB
TypeScript
113 lines
No EOL
2.4 KiB
TypeScript
// @strictNullChecks: true
|
|
|
|
interface X {
|
|
x: string;
|
|
}
|
|
|
|
interface Y {
|
|
y: string;
|
|
}
|
|
|
|
interface Z {
|
|
z: string;
|
|
}
|
|
|
|
declare function isX(obj: any): obj is X;
|
|
declare function isY(obj: any): obj is Y;
|
|
declare function isZ(obj: any): obj is Z;
|
|
|
|
function f1(obj: Object) {
|
|
if (isX(obj) || isY(obj) || isZ(obj)) {
|
|
obj;
|
|
}
|
|
if (isX(obj) && isY(obj) && isZ(obj)) {
|
|
obj;
|
|
}
|
|
}
|
|
|
|
// Repro from #8911
|
|
|
|
// two interfaces
|
|
interface A {
|
|
a: string;
|
|
}
|
|
|
|
interface B {
|
|
b: string;
|
|
}
|
|
|
|
// a type guard for B
|
|
function isB(toTest: any): toTest is B {
|
|
return toTest && toTest.b;
|
|
}
|
|
|
|
// a function that turns an A into an A & B
|
|
function union(a: A): A & B | null {
|
|
if (isB(a)) {
|
|
return a;
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Repro from #9016
|
|
|
|
declare function log(s: string): void;
|
|
|
|
// Supported beast features
|
|
interface Beast { wings?: boolean; legs?: number }
|
|
interface Legged { legs: number; }
|
|
interface Winged { wings: boolean; }
|
|
|
|
// Beast feature detection via user-defined type guards
|
|
function hasLegs(x: Beast): x is Legged { return x && typeof x.legs === 'number'; }
|
|
function hasWings(x: Beast): x is Winged { return x && !!x.wings; }
|
|
|
|
// Function to identify a given beast by detecting its features
|
|
function identifyBeast(beast: Beast) {
|
|
|
|
// All beasts with legs
|
|
if (hasLegs(beast)) {
|
|
|
|
// All winged beasts with legs
|
|
if (hasWings(beast)) {
|
|
if (beast.legs === 4) {
|
|
log(`pegasus - 4 legs, wings`);
|
|
}
|
|
else if (beast.legs === 2) {
|
|
log(`bird - 2 legs, wings`);
|
|
}
|
|
else {
|
|
log(`unknown - ${beast.legs} legs, wings`);
|
|
}
|
|
}
|
|
|
|
// All non-winged beasts with legs
|
|
else {
|
|
log(`manbearpig - ${beast.legs} legs, no wings`);
|
|
}
|
|
}
|
|
|
|
// All beasts without legs
|
|
else {
|
|
if (hasWings(beast)) {
|
|
log(`quetzalcoatl - no legs, wings`)
|
|
}
|
|
else {
|
|
log(`snake - no legs, no wings`)
|
|
}
|
|
}
|
|
}
|
|
|
|
function beastFoo(beast: Object) {
|
|
if (hasWings(beast) && hasLegs(beast)) {
|
|
beast; // Winged & Legged
|
|
}
|
|
else {
|
|
beast;
|
|
}
|
|
|
|
if (hasLegs(beast) && hasWings(beast)) {
|
|
beast; // Legged & Winged
|
|
}
|
|
} |