Documentation ¶
Overview ¶
Package typescript provides primitives to represent TypeScript types, and type declarations.
This package is completely decoupled from Go's reflect package. It provides a set of very simple primitives to build an AST-like representation of TypeScript types, and type declarations. Each primitive includes a ToTypeScript() method that can be used to recursively generate Go2TS's output TypeScript code.
These primitives decouple Go2TS's reflection code from its code generation code, which makes Go2TS easier to debug and reason about, and provide a flexible foundation that will allow us to extend Go2TS in the future with support for additional types, new features, etc.
The "root" type in this package is the TypeDeclaration interface, which is implemented by the InterfaceDeclaration and TypeAliasDeclaration structs.
The names of the primitives in this package are loosely based on the names and terms used in the TypeScript AST. Recommended links:
Index ¶
Constants ¶
const ( // Boolean represents the "boolean" TypeScript type. Boolean = BasicType("boolean") // Number represents the "number" TypeScript type. Number = BasicType("number") // String represents the "string" TypeScript type. String = BasicType("string") // Null represents the "null" TypeScript type. Null = BasicType("null") // Any represents the "null" TypeScript type. Any = BasicType("any") )
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ArrayType ¶
type ArrayType struct {
ItemsType Type
}
ArrayType represents a TypeScript array type such as string[], MyType[], etc.
func (*ArrayType) ToTypeScript ¶
ToTypeScript implements the Type interface.
type BasicType ¶
type BasicType string
BasicType represents a TypeScript basic type supported by Go2TS.
The "null" and "any" types are represented as basic types for simplicity.
func (BasicType) ToTypeScript ¶
ToTypeScript implements the Type interface.
type InterfaceDeclaration ¶
type InterfaceDeclaration struct { // Namespace is the namespace that the interface belongs to, or empty for the global namespace. Namespace string Identifier string Properties []PropertySignature }
InterfaceDeclaration represents a TypeScript interface declaration.
func (*InterfaceDeclaration) QualifiedName ¶
func (i *InterfaceDeclaration) QualifiedName() string
QualifiedName implements the TypeDeclaration interface.
func (*InterfaceDeclaration) ToTypeScript ¶
func (i *InterfaceDeclaration) ToTypeScript() string
ToTypeScript implements the TypeDeclaration interface.
func (*InterfaceDeclaration) TypeReference ¶
func (i *InterfaceDeclaration) TypeReference() *TypeReference
TypeReference implements the TypeDeclaration interface.
type LiteralType ¶
LiteralType represents a TypeScript literal type such as "hello", 123, true, etc.
See https://www.typescriptlang.org/docs/handbook/literal-types.html.
func (*LiteralType) ToTypeScript ¶
func (l *LiteralType) ToTypeScript() string
ToTypeScript implements the Type interface.
type MapType ¶
MapType represents a TypeScript type that describes an object used as a dictionary of key/value pairs, e.g. { [key: string]: MyStruct }.
func (*MapType) ToTypeScript ¶
ToTypeScript implements the Type interface.
type PropertySignature ¶
PropertySignature represents a property signature of a TypeScript interface declaration.
func (*PropertySignature) ToTypeScript ¶
func (p *PropertySignature) ToTypeScript() string
ToTypeScript converts the PropertySignature to a valid TypeScript interface property declaration.
type Type ¶
type Type interface { // ToTypeScript returns a TypeScript expression that can be used as a type, or panics if the type // is invalid. ToTypeScript() string // contains filtered or unexported methods }
Type represents a TypeScript type.
type TypeAliasDeclaration ¶
type TypeAliasDeclaration struct { // Namespace is the namespace that the type alias belongs to, or empty for the global namespace. Namespace string Identifier string Type Type // GenerateNominalTypes tells TypeAliasDeclaration to generate nominal TypeScript types // for aliased Go types. For background on "nominal typing" in TypeScript, see // https://www.typescriptlang.org/play#example/nominal-typing and // https://basarat.gitbook.io/typescript/main-1/nominaltyping. // The TypeScript compiler itself uses this technique to achieve // a similar effect as with Go's type aliases: // https://github.com/Microsoft/TypeScript/blob/7b48a182c05ea4dea81bab73ecbbe9e013a79e99/src/compiler/types.ts#L693 GenerateNominalTypes bool }
TypeAliasDeclaration represents a TypeScript type alias declaration, e.g. type Color = string.
func (*TypeAliasDeclaration) QualifiedName ¶
func (a *TypeAliasDeclaration) QualifiedName() string
QualifiedName implements the TypeDeclaration interface.
func (*TypeAliasDeclaration) ToTypeScript ¶
func (a *TypeAliasDeclaration) ToTypeScript() string
ToTypeScript implements the TypeDeclaration interface.
func (*TypeAliasDeclaration) TypeReference ¶
func (a *TypeAliasDeclaration) TypeReference() *TypeReference
TypeReference implements the TypeDeclaration interface.
type TypeDeclaration ¶
type TypeDeclaration interface { // TypeReference returns a reference to the declared type. TypeReference() *TypeReference // QualifiedName returns the qualified name of the declared type, e.g. MyNamespace.MyType. QualifiedName() string // ToTypeScript converts the TypeDeclaration to valid TypeScript. ToTypeScript() string // contains filtered or unexported methods }
TypeDeclaration represents a TypeScript type declaration, which can be an interface declaration, a type alias, etc.
type TypeReference ¶
type TypeReference struct {
// contains filtered or unexported fields
}
TypeReference represents a reference to a type declared via a TypeDeclaration (e.g. an interface, a type alias, etc.) and can be used anywhere a Type can be used.
func (*TypeReference) ToTypeScript ¶
func (t *TypeReference) ToTypeScript() string
ToTypeScript implements the Type interface.