- 
                Notifications
    You must be signed in to change notification settings 
- Fork 13.1k
Remove notion of predicates as types, move predicates back to signatures #6744
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
          
     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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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 hidden or 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.
👍