-
Notifications
You must be signed in to change notification settings - Fork 12.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Remove notion of predicates as types, move predicates back to signatures #6744
Merged
Merged
Changes from all commits
Commits
Show all changes
15 commits
Select commit
Hold shift + click to select a range
c730166
Add test
weswigham db05c05
Move type predicates back onto signatures, remove narrowing for prope…
DanielRosenwasser f1656b3
Error on nodes which should not have type predicates.
DanielRosenwasser 3489c55
Minor rename.
DanielRosenwasser 2195798
Use names of accessors instead of their entire spans.
DanielRosenwasser 5777e7d
Added tests.
DanielRosenwasser 6535809
Actually, it makes more sense to error on the predicate annotation th…
DanielRosenwasser b7778c1
Removed trailing whitespace for linter.
DanielRosenwasser f4f4720
Fixed up fourslash tests to only test functions.
DanielRosenwasser 0ccc8d0
Accepted baselines.
DanielRosenwasser 1f31bc7
Addressed CR feedback.
DanielRosenwasser 687b880
Revert "Use names of accessors instead of their entire spans."
DanielRosenwasser 9e9f541
Accepted baselines.
DanielRosenwasser f235b85
Added tests for declaration emit.
DanielRosenwasser 74b1e3f
Accepted baselines.
DanielRosenwasser File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
16 changes: 16 additions & 0 deletions
16
tests/baselines/reference/declarationEmitIdentifierPredicates01.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
//// [declarationEmitIdentifierPredicates01.ts] | ||
|
||
export function f(x: any): x is number { | ||
return typeof x === "number"; | ||
} | ||
|
||
//// [declarationEmitIdentifierPredicates01.js] | ||
"use strict"; | ||
function f(x) { | ||
return typeof x === "number"; | ||
} | ||
exports.f = f; | ||
|
||
|
||
//// [declarationEmitIdentifierPredicates01.d.ts] | ||
export declare function f(x: any): x is number; |
10 changes: 10 additions & 0 deletions
10
tests/baselines/reference/declarationEmitIdentifierPredicates01.symbols
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
=== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitIdentifierPredicates01.ts === | ||
|
||
export function f(x: any): x is number { | ||
>f : Symbol(f, Decl(declarationEmitIdentifierPredicates01.ts, 0, 0)) | ||
>x : Symbol(x, Decl(declarationEmitIdentifierPredicates01.ts, 1, 18)) | ||
>x : Symbol(x, Decl(declarationEmitIdentifierPredicates01.ts, 1, 18)) | ||
|
||
return typeof x === "number"; | ||
>x : Symbol(x, Decl(declarationEmitIdentifierPredicates01.ts, 1, 18)) | ||
} |
13 changes: 13 additions & 0 deletions
13
tests/baselines/reference/declarationEmitIdentifierPredicates01.types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
=== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitIdentifierPredicates01.ts === | ||
|
||
export function f(x: any): x is number { | ||
>f : (x: any) => x is number | ||
>x : any | ||
>x : any | ||
|
||
return typeof x === "number"; | ||
>typeof x === "number" : boolean | ||
>typeof x : string | ||
>x : any | ||
>"number" : string | ||
} |
14 changes: 14 additions & 0 deletions
14
tests/baselines/reference/declarationEmitIdentifierPredicatesWithPrivateName01.errors.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
tests/cases/conformance/declarationEmit/typePredicates/declarationEmitIdentifierPredicatesWithPrivateName01.ts(6,33): error TS4060: Return type of exported function has or is using private name 'I'. | ||
|
||
|
||
==== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitIdentifierPredicatesWithPrivateName01.ts (1 errors) ==== | ||
|
||
interface I { | ||
a: number; | ||
} | ||
|
||
export function f(x: any): x is I { | ||
~ | ||
!!! error TS4060: Return type of exported function has or is using private name 'I'. | ||
return typeof x.a === "number"; | ||
} |
16 changes: 16 additions & 0 deletions
16
tests/baselines/reference/declarationEmitIdentifierPredicatesWithPrivateName01.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
//// [declarationEmitIdentifierPredicatesWithPrivateName01.ts] | ||
|
||
interface I { | ||
a: number; | ||
} | ||
|
||
export function f(x: any): x is I { | ||
return typeof x.a === "number"; | ||
} | ||
|
||
//// [declarationEmitIdentifierPredicatesWithPrivateName01.js] | ||
"use strict"; | ||
function f(x) { | ||
return typeof x.a === "number"; | ||
} | ||
exports.f = f; |
43 changes: 43 additions & 0 deletions
43
tests/baselines/reference/declarationEmitThisPredicates01.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
//// [declarationEmitThisPredicates01.ts] | ||
|
||
export class C { | ||
m(): this is D { | ||
return this instanceof D; | ||
} | ||
} | ||
|
||
export class D extends C { | ||
} | ||
|
||
//// [declarationEmitThisPredicates01.js] | ||
"use strict"; | ||
var __extends = (this && this.__extends) || function (d, b) { | ||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
}; | ||
var C = (function () { | ||
function C() { | ||
} | ||
C.prototype.m = function () { | ||
return this instanceof D; | ||
}; | ||
return C; | ||
}()); | ||
exports.C = C; | ||
var D = (function (_super) { | ||
__extends(D, _super); | ||
function D() { | ||
_super.apply(this, arguments); | ||
} | ||
return D; | ||
}(C)); | ||
exports.D = D; | ||
|
||
|
||
//// [declarationEmitThisPredicates01.d.ts] | ||
export declare class C { | ||
m(): this is D; | ||
} | ||
export declare class D extends C { | ||
} |
19 changes: 19 additions & 0 deletions
19
tests/baselines/reference/declarationEmitThisPredicates01.symbols
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
=== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates01.ts === | ||
|
||
export class C { | ||
>C : Symbol(C, Decl(declarationEmitThisPredicates01.ts, 0, 0)) | ||
|
||
m(): this is D { | ||
>m : Symbol(m, Decl(declarationEmitThisPredicates01.ts, 1, 16)) | ||
>D : Symbol(D, Decl(declarationEmitThisPredicates01.ts, 5, 1)) | ||
|
||
return this instanceof D; | ||
>this : Symbol(C, Decl(declarationEmitThisPredicates01.ts, 0, 0)) | ||
>D : Symbol(D, Decl(declarationEmitThisPredicates01.ts, 5, 1)) | ||
} | ||
} | ||
|
||
export class D extends C { | ||
>D : Symbol(D, Decl(declarationEmitThisPredicates01.ts, 5, 1)) | ||
>C : Symbol(C, Decl(declarationEmitThisPredicates01.ts, 0, 0)) | ||
} |
20 changes: 20 additions & 0 deletions
20
tests/baselines/reference/declarationEmitThisPredicates01.types
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
=== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates01.ts === | ||
|
||
export class C { | ||
>C : C | ||
|
||
m(): this is D { | ||
>m : () => this is D | ||
>D : D | ||
|
||
return this instanceof D; | ||
>this instanceof D : boolean | ||
>this : this | ||
>D : typeof D | ||
} | ||
} | ||
|
||
export class D extends C { | ||
>D : D | ||
>C : C | ||
} |
19 changes: 19 additions & 0 deletions
19
tests/baselines/reference/declarationEmitThisPredicates02.errors.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates02.ts(9,10): error TS2526: A 'this' type is available only in a non-static member of a class or interface. | ||
|
||
|
||
==== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicates02.ts (1 errors) ==== | ||
|
||
export interface Foo { | ||
a: string; | ||
b: number; | ||
c: boolean; | ||
} | ||
|
||
export const obj = { | ||
m(): this is Foo { | ||
~~~~ | ||
!!! error TS2526: A 'this' type is available only in a non-static member of a class or interface. | ||
let dis = this as Foo; | ||
return dis.a != null && dis.b != null && dis.c != null; | ||
} | ||
} |
34 changes: 34 additions & 0 deletions
34
tests/baselines/reference/declarationEmitThisPredicates02.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
//// [declarationEmitThisPredicates02.ts] | ||
|
||
export interface Foo { | ||
a: string; | ||
b: number; | ||
c: boolean; | ||
} | ||
|
||
export const obj = { | ||
m(): this is Foo { | ||
let dis = this as Foo; | ||
return dis.a != null && dis.b != null && dis.c != null; | ||
} | ||
} | ||
|
||
//// [declarationEmitThisPredicates02.js] | ||
"use strict"; | ||
exports.obj = { | ||
m: function () { | ||
var dis = this; | ||
return dis.a != null && dis.b != null && dis.c != null; | ||
} | ||
}; | ||
|
||
|
||
//// [declarationEmitThisPredicates02.d.ts] | ||
export interface Foo { | ||
a: string; | ||
b: number; | ||
c: boolean; | ||
} | ||
export declare const obj: { | ||
m(): this is Foo; | ||
}; |
15 changes: 15 additions & 0 deletions
15
tests/baselines/reference/declarationEmitThisPredicatesWithPrivateName01.errors.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts(3,18): error TS4055: Return type of public method from exported class has or is using private name 'D'. | ||
|
||
|
||
==== tests/cases/conformance/declarationEmit/typePredicates/declarationEmitThisPredicatesWithPrivateName01.ts (1 errors) ==== | ||
|
||
export class C { | ||
m(): this is D { | ||
~ | ||
!!! error TS4055: Return type of public method from exported class has or is using private name 'D'. | ||
return this instanceof D; | ||
} | ||
} | ||
|
||
class D extends C { | ||
} |
34 changes: 34 additions & 0 deletions
34
tests/baselines/reference/declarationEmitThisPredicatesWithPrivateName01.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
//// [declarationEmitThisPredicatesWithPrivateName01.ts] | ||
|
||
export class C { | ||
m(): this is D { | ||
return this instanceof D; | ||
} | ||
} | ||
|
||
class D extends C { | ||
} | ||
|
||
//// [declarationEmitThisPredicatesWithPrivateName01.js] | ||
"use strict"; | ||
var __extends = (this && this.__extends) || function (d, b) { | ||
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; | ||
function __() { this.constructor = d; } | ||
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); | ||
}; | ||
var C = (function () { | ||
function C() { | ||
} | ||
C.prototype.m = function () { | ||
return this instanceof D; | ||
}; | ||
return C; | ||
}()); | ||
exports.C = C; | ||
var D = (function (_super) { | ||
__extends(D, _super); | ||
function D() { | ||
_super.apply(this, arguments); | ||
} | ||
return D; | ||
}(C)); |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍