microsoft / microsoft/TypeScript
Decorator Metdata: expose array element type
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Go
- Sterne
- 111k
- Forks
- 14.3k
- Ø Merge
- 2 T. 4 Std.
- Gemergte PRs (30 T.)
- 132
Beschreibung
TSC 175, target ES6, Node 5.6
Sample class with decorated properties:
@sg.DMClass
export class User implements IUser {
@sg.DMProperty
firstName: string;
@sg.DMProperty
lastName: string;
@sg.DMProperty
friends: User[];
}
Property decorator:
export function DMProperty(target: any, key: string) {
var type = Reflect.getMetadata("design:type", target, key);
}
Current behaviour:
When the decorator gets called for property "friends", "type" is "Array" and the captured type ("User") is lost.
Expected behaviour
"type" should contain the captured type ("User"), too
Following very dirty work-around does the job: I modified tsc's method "emitSerializedTypeNode":
function emitSerializedTypeNode(node) {
if (node) {
console.log("*** emitSerializedTypeNode: node.kind: ", node.kind);
switch (node.kind) {
...
case 157:
// Begin dirty ---------------------------------------------------------------------------
var _elemType = node.elementType.typeName.text;
write("{name: 'Array<" + _elemType + ">', type:'Array', elemType:'" + _elemType + "'}");
console.log("*** emitSerializedTypeNode: Array, type: ", node.elementType.typeName.text);
// End dirty -----------------------------------------------------------------------------
return;
case 150:
...
Best
Mind
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne bei der emitSerializedTypeNode-Methode des TypeScript-Compilers, insbesondere bei ihrer Behandlung von Array-Knoten. Vergleiche die aktuellen design:type-Metadaten für User[] mit den erwarteten Informationen zum Elementtyp aus dem Issue und dem vorgeschlagenen Workaround. Als erledigt gilt die Aufgabe, wenn die ausgegebenen Metadaten den Array-Elementtyp beibehalten und zugleich die vorhandenen Array-Typinformationen erhalten.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- javascript, typescript
- Bereich
- compilers
- Issue-Typ
- Feature
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 25/100