microsoft / microsoft/TypeScript
Allow class inheritance in ambient contexts, even with a base private constructor
Personne n'a encore pris cette issue.
- Langage dominant
- Go
- Étoiles
- 111k
- Forks
- 14.3k
- Merge moyen
- 2 j 4 h
- PR mergées (30 j)
- 132
Description
TypeScript Version: nightly (2.5.0-dev.20170902)
Code
declare namespace Foo {
class Bar {
private constructor();
Box: string;
}
class Baz extends Bar {
private constructor();
}
function generator(): Baz;
}
let x = Foo.generator();
x.Box = 'abcd';
Expected behavior:
Compile without error.
Actual behavior:
error TS2675: Cannot extend a class 'Foo.Bar'. Class constructor is marked as private.
Use case
This would allow declaring the types of host-supplied objects, with the following features:
- can inherit members from each other
- cannot be inherited from using standard Typescript/Javascript classes
- cannot be assigned to from an object literal with matching members
- cannot be constructed, only returned from a factory method
declare namespace com.sun.star.text {
class XTextTablesSupplier {
private constructor();
private typekey: XTextTablesSupplier;
readonly TextTables: any;
}
class GenericTextDocument extends XTextTablesSupplier {
private constructor();
private typekey1: GenericTextDocument;
CharacterCount: number;
}
}
declare function createInstance(typename: 'com.sun.star.text.GenericTextDocument'): com.sun.star.text.GenericTextDocument;
let x = createInstance('com.sun.star.text.GenericTextDocument'); // OK
x = new com.sun.star.text.GenericTextDocument(); // Error
let y = x.TextTables; // OK
// The following would be an error
x = {
TextTables: '',
CharacterCount: 5
};
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par compiler l’exemple d’espace de noms ambient de l’issue avec le comportement nocturne de TypeScript référencé. Suivez le diagnostic du checker pour l’extension de Foo.Bar et comparez-le avec l’acceptation attendue de la déclaration. C’est terminé lorsque l’exemple se compile, tandis que la construction et l’affectation d’un littéral d’objet restent en erreur.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- typescript
- Domaine
- compilers
- Type d'issue
- Fonctionnalité
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- À l'abandon
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 35/100