Hier ist eine generalisierte (und aktualisiert) Lösung, die Markus Jarderot die aus der Antwort baut:
static void RegisterDictionaryMemberFormatter(this TsGenerator tsGenerator)
{
tsGenerator.SetMemberTypeFormatter((tsProperty, memberTypeName) => {
var dictionaryInterface =
tsProperty.PropertyType.Type.GetInterface(typeof(IDictionary<,>).Name) ??
tsProperty.PropertyType.Type.GetInterface(typeof(IDictionary).Name);
if (dictionaryInterface != null)
{
return tsGenerator.GetFullyQualifiedTypeName(new TsClass(dictionaryInterface));
}
else
{
return tsGenerator.DefaultMemberTypeFormatter(tsProperty, memberTypeName);
}
});
}
// and if you like the fluent syntax...
static TypeScriptFluent WithDictionaryMemberFormatter(this TypeScriptFluent typeScriptFluent)
{
typeScriptFluent.ScriptGenerator.RegisterDictionaryMemberFormatter();
return typeScriptFluent;
}
es wie folgt verwendet:
var ts = TypeLite.TypeScript.Definitions().For(typeof(SomeClass).Assembly);
ts.ScriptGenerator.RegisterDictionaryMemberFormatter();
// alternatively with fluent syntax:
var ts = TypeLite.TypeScript.Definitions()
.For(typeof(SomeClass).Assembly)
.WithDictionaryMemberFormatter();
N. B. Dies korrigiert nur Typ-Signaturen von Eigenschaften (oder Feldern), die Dictionary-Typen haben. Auch Definitionen für IDictionary
sind nicht automatisch ausgesendet, dann würden Sie sie manuell hinzufügen:
declare module System.Collections.Generic {
interface IDictionary<TKey extends String, TValue> {
[key: string]: TValue;
}
}
declare module System.Collections {
interface IDictionary {
[key: string]: any;
}
}
Ich habe versucht, ".WithConvertor> (t => "any")", aber Das Ergebnis ist "Wert: System.Collections.Generic.any [];" Nicht das, was ich –
mattias