-
Notifications
You must be signed in to change notification settings - Fork 12.8k
Protected nested classes #10017
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
Comments
This issue is now awaiting more feedback. This means we'd like to hear from more people who would be helped by this feature, understand their use cases, and possibly contrast with other proposals that might solve the problem in a simpler way (or solve many other problems at once). If this feature looks like a good fit for you, please use the 👍 reaction on the original post. Comments outlining different scenarios that would be benefited from the feature are also welcomed. |
Many existing libraries have already been using class based structure with ES5 syntax. And sometimes they attach another class on a class as a function property. Due to If a static member of a class is another class, and the static class can be recognized as a namespace, that would be convenient for some libraries to migrate to Typescript. |
Note to self - there's a duplicate of this bug somewhere |
The compilation error for the first example now (in Typescript 3) reads:
I'm not sure if there's a better way to do this but I managed to get it to compile using this workaround: class Outer {
protected static Inner = class {}
private myInner: InstanceType<typeof Outer.Inner>;
} |
It seems there is a different error in Example 3 in 3.3.3 and later. export class Outer {
protected static Inner = class {};
}
export class Child extends Outer {
static temp = class extends Outer.Inner {}
// ~~~~~ '(Anonymous class)' is referenced directly or indirectly in its own base expression.ts(2506)
} And it is possible to inherite from a public reference to the protected nested class. export class Outer {
protected static A1 = class {}
static A2 = Outer.A1;
static B1 = class extends Outer.A1 {
// Error
}
static B2 = class extends Outer.A2 {
// OK, as expected.
}
} |
TypeScript Version: 1.8.9
Code
Expected behavior: No errors.
Actual behavior: Compiler error:
Cannot find namespace 'Outer'. Line 3, Column 24
Code
Expected behavior: No errors.
Actual behavior: Compiler error:
Module 'Outer' has no exported member 'Inner'. Line 3, Column 32
Code
Expected behavior: No errors.
Actual behavior: Compiler error:
Property 'Inner' is protected and only accessible within class 'Outer' and its subclasses. Line 6, Column 35
The problem here is that there is no way to define a protected nested class in a way that makes it possible to use in a type declaration. The third example shows why I want to use this: I want a nested class that can only be extended by classes that extend the parent class.
The text was updated successfully, but these errors were encountered: