Skip to content
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

Meta-issue: this disambiguator #513

Closed
RyanCavanaugh opened this issue Aug 22, 2014 · 3 comments
Closed

Meta-issue: this disambiguator #513

RyanCavanaugh opened this issue Aug 22, 2014 · 3 comments
Labels
Duplicate An existing issue was already created Meta-Issue An issue about the team, or the direction of TypeScript Suggestion An idea for TypeScript

Comments

@RyanCavanaugh
Copy link
Member

Do not discuss the details of these in this bug! Go to the appropriate linked issue to discuss them

This issue is to track all the various this proposals floating around and to distinguish them. Any comments here should be clarifying comments/questions.


Specify this as a function return value

#285

Let type definitions specify that the type of a field (or maybe just function return values) is the same as the type that contains the property.

Example:

interface Animal {
  clone(): this; // Today: clone(): Animal;
  self: this;
}
interface Dog extends Animal { woof(); }
interface Cat extends Animal { meow(); }
var c: Cat;
var cc = c.clone(); // Desired: cc: Cat
cc.meow(); // Desired: OK. Today: Fails
var ccc = cc.self; // Desired: ccc: Cat

Specify, as part of a function, the type of this inside the function body

#229

Allow a syntax to specify the type of this as part of a function expression.

Example:

function fn(this: HTMLElement) {
  this.focus(); // OK
}
fn(); // 'this' argument not visible externally. May or may not be error

Specify, as part of a function type, the type of this inside a function body

(no issue yet, please leave a comment if you create one)
Allow a syntax to specify that when a function is invoked, this will be of a certain type

Example:

// http://api.jquery.com/jquery.each/
function jquery_each<T>(items: T[], callback: (this: T, index: number, value: T) { /* ... */ }
jquery_each(['foo', 'bar'], () => console.log(this.substr(1));

Specify the what valid this values are during function invocation

#15

Add type system logic to detect when a method is being invoked without a proper this context

class Foo {
  bar = 5;
  printBar() { console.log(this.bar); }
}
var f = new Foo();
// prints 'undefined', not '5'
window.setImmediate(f.printBar); // Flag this as an error
@LPGhatguy
Copy link
Contributor

It appears most all of these suggestions have merged into #3694 except for the last one.

@sandersn
Copy link
Member

sandersn commented Jan 5, 2016

#3694 also covers the last one -- once you specify a this type for a function, function invocation needs to check that the caller satisfies the type.

@sandersn sandersn added the Duplicate An existing issue was already created label Jan 5, 2016
@mhegazy mhegazy removed the Needs More Info The issue still hasn't been fully clarified label Feb 20, 2016
@mhegazy
Copy link
Contributor

mhegazy commented Apr 7, 2016

#6739 covers most of the remaining pieces.

@mhegazy mhegazy closed this as completed Apr 7, 2016
@microsoft microsoft locked and limited conversation to collaborators Jun 18, 2018
@RyanCavanaugh RyanCavanaugh added the Meta-Issue An issue about the team, or the direction of TypeScript label Jun 15, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Duplicate An existing issue was already created Meta-Issue An issue about the team, or the direction of TypeScript Suggestion An idea for TypeScript
Projects
None yet
Development

No branches or pull requests

4 participants