Я улучшил поддержку этого в последней предварительной версии ServiceStack v5.8.1 для MyGet .
Реализация по умолчанию теперь должна генерировать необязательные свойства TypeScript для свойств Nullable. Таким образом, по умолчанию теперь он генерирует:
export class Data
{
public value: number;
public optionalValue?: number;
public text: string;
public constructor(init?: Partial<Data>) { (Object as any).assign(this, init); }
}
Чтобы указать только обязательные свойства c и все другие необязательные свойства, вы можете включить опцию MakePropertiesOptional: True
, а затем отметить, какие свойства должны потребоваться с помощью [Required]
атрибут, например:
public class Data
{
[Required]
public int Value { get; set; }
public int? OptionalValue { get; set; }
public string Text { get; set; }
}
Это сгенерирует желаемое:
export class Data
{
// @Required()
public value: number;
public optionalValue?: number;
public text?: string;
public constructor(init?: Partial<Data>) { (Object as any).assign(this, init); }
}
Другой вариант сделать все свойства reference и nullable необязательные и требуемые типы значений используют новый фильтр IsPropertyOptional
, например:
TypeScriptGenerator.IsPropertyOptional = (generator, type, prop) =>
prop.IsValueType != true || prop.Type == typeof(Nullable<>).Name;
или с новым PropertyTypeFilter
вы можете вместо этого сделать каждое свойство обнуляемым, например:
TypeScriptGenerator.IsPropertyOptional = (generator, type, prop) => false;
TypeScriptGenerator.PropertyTypeFilter = (gen, type, prop) =>
gen.GetPropertyType(prop, out var isNullable) + "|null";
Что сейчас настраивается, вы устанавливаете:
TypeScriptGenerator.UseNullableProperties = true;
, который генерирует каждое свойство как обнуляемое, например:
export class Data
{
public value: number|null;
public optionalValue: number|null;
public text: string|null;
public constructor(init?: Partial<Data>) { (Object as any).assign(this, init); }
}