From C# to TypeScript.
public class Company<TAddress>: BaseEntity<int> where TAddress: Address, new() {
public string Name { get; set; }
public int EmployeeCount { get; set; }
public decimal Income;
public IList<TAddress> Address { get; set; }
}
var typeScript = CsToTs.Generator.GenerateTypeScript(typeof(Company<>));
Generates below TypeScript;
export interface IBase<T> {
Id: T;
}
export abstract class BaseEntity<TKey> implements IBase<TKey> {
UpdateUser: string;
Type: TypeEnum;
Id: TKey;
CreateUser: string;
CreateDate: string;
UpdateDate: string;
IsActive: boolean;
InternalType: any;
}
export class Address extends BaseEntity<number> implements IBase<number> {
PostalCode: number;
CompanyId: number;
City: string;
Detail: string;
}
export class Company<TAddress extends Address & { new(): TAddress }> extends BaseEntity<number> {
Income: number;
Name: string;
EmployeeCount: number;
Address: Array<TAddress>;
}
export enum TypeEnum {
Type1 = 2,
Type2 = 5,
}
You can generate interfaces for classes.
var options = new TypeScriptOptions {
UseInterfaceForClasses = true,
};
var typeScript = Generator.GenerateTypeScript(typeof(Company<>), options);
Generates below TypeScript;
export interface IBase<T> {
Id: T;
}
export interface BaseEntity<TKey> extends IBase<TKey> {
UpdateUser: string;
Type: TypeEnum;
Id: TKey;
CreateUser: string;
CreateDate: string;
UpdateDate: string;
IsActive: boolean;
InternalType: any;
}
export interface Address extends BaseEntity<number> {
PostalCode: number;
CompanyId: number;
City: string;
Detail: string;
}
export interface Company<TAddress extends Address> extends BaseEntity<number> {
Income: number;
Name: string;
EmployeeCount: number;
Address: Array<TAddress>;
}
export enum TypeEnum {
Type1 = 2,
Type2 = 5,
}