Skip to content

Commit

Permalink
Merge branch 'main' into module-node20
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewbranch committed Dec 19, 2024
2 parents 2ffe7d0 + 0dda037 commit 0b16eb6
Show file tree
Hide file tree
Showing 15 changed files with 1,441 additions and 923 deletions.
4 changes: 2 additions & 2 deletions .dprint.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@
// Note: if adding new languages, make sure settings.template.json is updated too.
// Also, if updating typescript, update the one in package.json.
"plugins": [
"https://plugins.dprint.dev/typescript-0.93.0.wasm",
"https://plugins.dprint.dev/json-0.19.3.wasm",
"https://plugins.dprint.dev/typescript-0.93.3.wasm",
"https://plugins.dprint.dev/json-0.19.4.wasm",
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm"
]
}
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
os:
- ubuntu-latest
- windows-latest
- macos-14
- macos-latest
node-version:
- '22'
- '20'
Expand All @@ -43,7 +43,7 @@ jobs:
exclude:
# No Node 14 on ARM macOS
- node-version: '14'
os: macos-14
os: macos-latest

runs-on: ${{ matrix.os }}
name: Test Node ${{ matrix.node-version }} on ${{ matrix.os }}${{ (!matrix.bundle && ' with --no-bundle') || '' }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/twoslash-repros.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
- uses: actions/setup-node@39370e3970a6d050c480ffad4ff0ed4d3fdee5af # v4.1.0
with:
node-version: 'lts/*'
- uses: microsoft/TypeScript-Twoslash-Repro-Action@8680b5b290d48a7badbc7ba65971d526c61b86b8 # master
- uses: microsoft/TypeScript-Twoslash-Repro-Action@master
with:
github-token: ${{ secrets.TS_BOT_GITHUB_TOKEN }}
issue: ${{ github.event.inputs.issue }}
Expand Down
1,928 changes: 1,033 additions & 895 deletions package-lock.json

Large diffs are not rendered by default.

40 changes: 20 additions & 20 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,48 +40,48 @@
],
"devDependencies": {
"@dprint/formatter": "^0.4.1",
"@dprint/typescript": "0.93.0",
"@dprint/typescript": "0.93.3",
"@esfx/canceltoken": "^1.0.0",
"@eslint/js": "^9.11.1",
"@eslint/js": "^9.17.0",
"@octokit/rest": "^21.0.2",
"@types/chai": "^4.3.20",
"@types/diff": "^5.2.2",
"@types/diff": "^5.2.3",
"@types/minimist": "^1.2.5",
"@types/mocha": "^10.0.8",
"@types/mocha": "^10.0.10",
"@types/ms": "^0.7.34",
"@types/node": "latest",
"@types/source-map-support": "^0.5.10",
"@types/which": "^3.0.4",
"@typescript-eslint/rule-tester": "^8.8.0",
"@typescript-eslint/type-utils": "^8.8.0",
"@typescript-eslint/utils": "^8.8.0",
"@typescript-eslint/rule-tester": "^8.18.1",
"@typescript-eslint/type-utils": "^8.18.1",
"@typescript-eslint/utils": "^8.18.1",
"azure-devops-node-api": "^14.1.0",
"c8": "^10.1.2",
"c8": "^10.1.3",
"chai": "^4.5.0",
"chalk": "^4.1.2",
"chokidar": "^3.6.0",
"diff": "^5.2.0",
"dprint": "^0.47.2",
"dprint": "^0.47.6",
"esbuild": "^0.24.0",
"eslint": "^9.11.1",
"eslint": "^9.17.0",
"eslint-formatter-autolinkable-stylish": "^1.4.0",
"eslint-plugin-regexp": "^2.6.0",
"fast-xml-parser": "^4.5.0",
"eslint-plugin-regexp": "^2.7.0",
"fast-xml-parser": "^4.5.1",
"glob": "^10.4.5",
"globals": "^15.9.0",
"globals": "^15.13.0",
"hereby": "^1.10.0",
"jsonc-parser": "^3.3.1",
"knip": "^5.30.6",
"knip": "^5.41.0",
"minimist": "^1.2.8",
"mocha": "^10.7.3",
"mocha": "^10.8.2",
"mocha-fivemat-progress-reporter": "^0.1.0",
"monocart-coverage-reports": "^2.11.0",
"monocart-coverage-reports": "^2.11.4",
"ms": "^2.1.3",
"playwright": "^1.47.2",
"playwright": "^1.49.1",
"source-map-support": "^0.5.21",
"tslib": "^2.7.0",
"typescript": "^5.6.2",
"typescript-eslint": "^8.8.0",
"tslib": "^2.8.1",
"typescript": "^5.7.2",
"typescript-eslint": "^8.18.1",
"which": "^3.0.1"
},
"overrides": {
Expand Down
3 changes: 2 additions & 1 deletion src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29404,8 +29404,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
if (checkDerived) {
return filterType(type, t => !isTypeDerivedFrom(t, candidate));
}
type = type.flags & TypeFlags.Unknown ? unknownUnionType : type;
const trueType = getNarrowedType(type, candidate, /*assumeTrue*/ true, /*checkDerived*/ false);
return filterType(type, t => !isTypeSubsetOf(t, trueType));
return recombineUnknownType(filterType(type, t => !isTypeSubsetOf(t, trueType)));
}
if (type.flags & TypeFlags.AnyOrUnknown) {
return candidate;
Expand Down
5 changes: 3 additions & 2 deletions src/harness/tsserverLogger.ts
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ export function sanitizeLog(s: string): string {
s = s.replace(/Elapsed::?\s*\d+(?:\.\d+)?ms/g, "Elapsed:: *ms");
s = s.replace(/"updateGraphDurationMs":\s*\d+(?:\.\d+)?/g, `"updateGraphDurationMs": *`);
s = s.replace(/"createAutoImportProviderProgramDurationMs":\s*\d+(?:\.\d+)?/g, `"createAutoImportProviderProgramDurationMs": *`);
s = replaceAll(s, ts.version, "FakeVersion");
s = s.replace(new RegExp(`\\b${ts.regExpEscape(ts.version)}\\b`, "g"), "FakeVersion");
s = s.replace(/getCompletionData: Get current token: \d+(?:\.\d+)?/g, `getCompletionData: Get current token: *`);
s = s.replace(/getCompletionData: Is inside comment: \d+(?:\.\d+)?/g, `getCompletionData: Is inside comment: *`);
s = s.replace(/getCompletionData: Get previous token: \d+(?:\.\d+)?/g, `getCompletionData: Get previous token: *`);
Expand All @@ -130,7 +130,8 @@ export function sanitizeLog(s: string): string {
s = s.replace(/"semanticDiag":\s*\d+(?:.\d+)?/g, `"semanticDiag": *`);
s = s.replace(/"suggestionDiag":\s*\d+(?:.\d+)?/g, `"suggestionDiag": *`);
s = s.replace(/"regionSemanticDiag":\s*\d+(?:.\d+)?/g, `"regionSemanticDiag": *`);
s = replaceAll(s, `@ts${ts.versionMajorMinor}`, `@tsFakeMajor.Minor`);
s = s.replace(new RegExp(`\\b@ts${ts.regExpEscape(ts.versionMajorMinor)}\\b`, "g"), `@tsFakeMajor.Minor`);

s = sanitizeHarnessLSException(s);
return s;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15363,6 +15363,9 @@
<Item ItemId=";This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128" ItemType="0" PsrId="306" Leaf="true">
<Str Cat="Text">
<Val><![CDATA[This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic.]]></Val>
<Tgt Cat="Text" Stat="Loc" Orig="New">
<Val><![CDATA[此成員不能包含具有 '@override' 標籤的 JSDoc 註解,因為其名稱為動態。]]></Val>
</Tgt>
</Str>
<Disp Icon="Str" />
</Item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15363,6 +15363,9 @@
<Item ItemId=";This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128" ItemType="0" PsrId="306" Leaf="true">
<Str Cat="Text">
<Val><![CDATA[This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic.]]></Val>
<Tgt Cat="Text" Stat="Loc" Orig="New">
<Val><![CDATA[이 멤버는 이름이 동적이기 때문에 '@override' 태그가 포함된 JSDoc 주석을 가질 수 없습니다.]]></Val>
</Tgt>
</Str>
<Disp Icon="Str" />
</Item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15350,6 +15350,9 @@
<Item ItemId=";This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128" ItemType="0" PsrId="306" Leaf="true">
<Str Cat="Text">
<Val><![CDATA[This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic.]]></Val>
<Tgt Cat="Text" Stat="Loc" Orig="New">
<Val><![CDATA[Ten element członkowski nie może mieć komentarza JSDoc z tagiem „@zastąp”, ponieważ jego nazwa jest dynamiczna.]]></Val>
</Tgt>
</Str>
<Disp Icon="Str" />
</Item>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15353,6 +15353,9 @@
<Item ItemId=";This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128" ItemType="0" PsrId="306" Leaf="true">
<Str Cat="Text">
<Val><![CDATA[This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic.]]></Val>
<Tgt Cat="Text" Stat="Loc" Orig="New">
<Val><![CDATA[Esse membro não pode ter um comentário JSDoc com uma marcação '@override' porque seu nome é dinâmico.]]></Val>
</Tgt>
</Str>
<Disp Icon="Str" />
</Item>
Expand Down
104 changes: 104 additions & 0 deletions src/testRunner/unittests/paths.ts
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,110 @@ describe("unittests:: core paths", () => {
assert.strictEqual(ts.resolvePath("a", "b", "/c"), "/c");
assert.strictEqual(ts.resolvePath("a", "b", "../c"), "a/c");
});
it("getNormalizedAbsolutePath", () => {
assert.strictEqual(ts.getNormalizedAbsolutePath("/", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/.", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/./", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/../", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a", ""), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/", ""), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/.", ""), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/foo.", ""), "/a/foo.");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/./", ""), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/./b", ""), "/a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/./b/", ""), "/a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/..", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/../", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/../", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/../b", ""), "/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/../b/", ""), "/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/..", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/..", "/"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/..", "b/"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/..", "/b"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/.", "b"), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/.", "."), "/a");

// Tests as above, but with backslashes.
assert.strictEqual(ts.getNormalizedAbsolutePath("\\", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\.", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\.\\", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\..\\", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\.\\", ""), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\.\\b", ""), "/a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\.\\b\\", ""), "/a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..\\", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..\\", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..\\b", ""), "/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..\\b\\", ""), "/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..", ""), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..", "\\"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..", "b\\"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\..", "\\b"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\.", "b"), "/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\.", "."), "/a");

// Relative paths on an empty currentDirectory.
assert.strictEqual(ts.getNormalizedAbsolutePath("", ""), "");
assert.strictEqual(ts.getNormalizedAbsolutePath(".", ""), "");
assert.strictEqual(ts.getNormalizedAbsolutePath("./", ""), "");
// Strangely, these do not normalize to the empty string.
assert.strictEqual(ts.getNormalizedAbsolutePath("..", ""), "..");
assert.strictEqual(ts.getNormalizedAbsolutePath("../", ""), "..");

// Interaction between relative paths and currentDirectory.
assert.strictEqual(ts.getNormalizedAbsolutePath("", "/home"), "/home");
assert.strictEqual(ts.getNormalizedAbsolutePath(".", "/home"), "/home");
assert.strictEqual(ts.getNormalizedAbsolutePath("./", "/home"), "/home");
assert.strictEqual(ts.getNormalizedAbsolutePath("..", "/home"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("../", "/home"), "/");
assert.strictEqual(ts.getNormalizedAbsolutePath("a", "b"), "b/a");
assert.strictEqual(ts.getNormalizedAbsolutePath("a", "b/c"), "b/c/a");

// Base names starting or ending with a dot do not affect normalization.
assert.strictEqual(ts.getNormalizedAbsolutePath(".a", ""), ".a");
assert.strictEqual(ts.getNormalizedAbsolutePath("..a", ""), "..a");
assert.strictEqual(ts.getNormalizedAbsolutePath("a.", ""), "a.");
assert.strictEqual(ts.getNormalizedAbsolutePath("a..", ""), "a..");

assert.strictEqual(ts.getNormalizedAbsolutePath("/base/./.a", ""), "/base/.a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/../.a", ""), "/.a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/./..a", ""), "/base/..a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/../..a", ""), "/..a");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/./..a/b", ""), "/base/..a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/../..a/b", ""), "/..a/b");

assert.strictEqual(ts.getNormalizedAbsolutePath("/base/./a.", ""), "/base/a.");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/../a.", ""), "/a.");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/./a..", ""), "/base/a..");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/../a..", ""), "/a..");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/./a../b", ""), "/base/a../b");
assert.strictEqual(ts.getNormalizedAbsolutePath("/base/../a../b", ""), "/a../b");

// Consecutive intermediate slashes are normalized to a single slash.
assert.strictEqual(ts.getNormalizedAbsolutePath("a//b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a///b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a/b//c", ""), "a/b/c");
assert.strictEqual(ts.getNormalizedAbsolutePath("/a/b//c", ""), "/a/b/c");
assert.strictEqual(ts.getNormalizedAbsolutePath("//a/b//c", ""), "//a/b/c");

// Backslashes are converted to slashes,
// and then consecutive intermediate slashes are normalized to a single slash
assert.strictEqual(ts.getNormalizedAbsolutePath("a\\\\b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a\\\\\\b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a\\b\\\\c", ""), "a/b/c");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\b\\\\c", ""), "/a/b/c");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\\\a\\b\\\\c", ""), "//a/b/c");

// The same occurs for mixed slashes.
assert.strictEqual(ts.getNormalizedAbsolutePath("a/\\b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a\\/b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a\\/\\b", ""), "a/b");
assert.strictEqual(ts.getNormalizedAbsolutePath("a\\b//c", ""), "a/b/c");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\a\\b\\\\c", ""), "/a/b/c");
assert.strictEqual(ts.getNormalizedAbsolutePath("\\\\a\\b\\\\c", ""), "//a/b/c");
});
it("getPathRelativeTo", () => {
assert.strictEqual(ts.getRelativePathFromDirectory("/", "/", /*ignoreCase*/ false), "");
assert.strictEqual(ts.getRelativePathFromDirectory("/a", "/a", /*ignoreCase*/ false), "");
Expand Down
89 changes: 89 additions & 0 deletions tests/baselines/reference/narrowUnknownByTypePredicate.symbols
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
//// [tests/cases/compiler/narrowUnknownByTypePredicate.ts] ////

=== narrowUnknownByTypePredicate.ts ===
declare function isNotNullish(value: unknown): value is {};
>isNotNullish : Symbol(isNotNullish, Decl(narrowUnknownByTypePredicate.ts, 0, 0))
>value : Symbol(value, Decl(narrowUnknownByTypePredicate.ts, 0, 30))
>value : Symbol(value, Decl(narrowUnknownByTypePredicate.ts, 0, 30))

declare function isNullish(value: unknown): value is null | undefined;
>isNullish : Symbol(isNullish, Decl(narrowUnknownByTypePredicate.ts, 0, 59))
>value : Symbol(value, Decl(narrowUnknownByTypePredicate.ts, 1, 27))
>value : Symbol(value, Decl(narrowUnknownByTypePredicate.ts, 1, 27))

declare const value1: unknown;
>value1 : Symbol(value1, Decl(narrowUnknownByTypePredicate.ts, 3, 13))

if (isNotNullish(value1)) {
>isNotNullish : Symbol(isNotNullish, Decl(narrowUnknownByTypePredicate.ts, 0, 0))
>value1 : Symbol(value1, Decl(narrowUnknownByTypePredicate.ts, 3, 13))

value1;
>value1 : Symbol(value1, Decl(narrowUnknownByTypePredicate.ts, 3, 13))
}

declare const value2: unknown;
>value2 : Symbol(value2, Decl(narrowUnknownByTypePredicate.ts, 8, 13))

if (!isNotNullish(value2)) {
>isNotNullish : Symbol(isNotNullish, Decl(narrowUnknownByTypePredicate.ts, 0, 0))
>value2 : Symbol(value2, Decl(narrowUnknownByTypePredicate.ts, 8, 13))

value2;
>value2 : Symbol(value2, Decl(narrowUnknownByTypePredicate.ts, 8, 13))
}

declare const value3: unknown;
>value3 : Symbol(value3, Decl(narrowUnknownByTypePredicate.ts, 13, 13))

if (isNullish(value3)) {
>isNullish : Symbol(isNullish, Decl(narrowUnknownByTypePredicate.ts, 0, 59))
>value3 : Symbol(value3, Decl(narrowUnknownByTypePredicate.ts, 13, 13))

value3;
>value3 : Symbol(value3, Decl(narrowUnknownByTypePredicate.ts, 13, 13))
}

declare const value4: unknown;
>value4 : Symbol(value4, Decl(narrowUnknownByTypePredicate.ts, 18, 13))

if (!isNullish(value4)) {
>isNullish : Symbol(isNullish, Decl(narrowUnknownByTypePredicate.ts, 0, 59))
>value4 : Symbol(value4, Decl(narrowUnknownByTypePredicate.ts, 18, 13))

value4;
>value4 : Symbol(value4, Decl(narrowUnknownByTypePredicate.ts, 18, 13))
}

declare class A { foo: string; }
>A : Symbol(A, Decl(narrowUnknownByTypePredicate.ts, 21, 1))
>foo : Symbol(A.foo, Decl(narrowUnknownByTypePredicate.ts, 23, 17))

declare function isA(value: unknown): value is A;
>isA : Symbol(isA, Decl(narrowUnknownByTypePredicate.ts, 23, 32))
>value : Symbol(value, Decl(narrowUnknownByTypePredicate.ts, 24, 21))
>value : Symbol(value, Decl(narrowUnknownByTypePredicate.ts, 24, 21))
>A : Symbol(A, Decl(narrowUnknownByTypePredicate.ts, 21, 1))

declare const value5: unknown;
>value5 : Symbol(value5, Decl(narrowUnknownByTypePredicate.ts, 26, 13))

if (isA(value5)) {
>isA : Symbol(isA, Decl(narrowUnknownByTypePredicate.ts, 23, 32))
>value5 : Symbol(value5, Decl(narrowUnknownByTypePredicate.ts, 26, 13))

value5;
>value5 : Symbol(value5, Decl(narrowUnknownByTypePredicate.ts, 26, 13))
}

declare const value6: unknown;
>value6 : Symbol(value6, Decl(narrowUnknownByTypePredicate.ts, 31, 13))

if (!isA(value6)) {
>isA : Symbol(isA, Decl(narrowUnknownByTypePredicate.ts, 23, 32))
>value6 : Symbol(value6, Decl(narrowUnknownByTypePredicate.ts, 31, 13))

value6;
>value6 : Symbol(value6, Decl(narrowUnknownByTypePredicate.ts, 31, 13))
}

Loading

0 comments on commit 0b16eb6

Please sign in to comment.