Style guide
This guide offers a recommended set of naming conventions to follow when drafting a TypeSpec specification.
The guidelines in this article are used in TypeSpec Core libraries. You can use them, or adapt them to your needs. The primary objectives are consistency and readability within your project, team, organization, or company source code.
Naming convention
Type | Naming | Example |
---|---|---|
scalar | camelCase | scalar uuid extends string; |
model | PascalCase | model Pet {} |
model property | camelCase | model Pet {furColor: string} |
enum | PascalCase | enum Direction {} |
enum member | camelCase | enum Direction {up, down} |
namespace | PascalCase | namespace Org.PetStore |
interface | PascalCase | interface Stores {} |
operation | camelCase | op listPets(): Pet[]; |
operation params | camelCase | op getPet(petId: string): Pet; |
unions | PascalCase | union Pet {cat: Cat, dog: Dog} |
unions variants | camelCase | union Pet {cat: Cat, dog: Dog} |
alias | camelCase or PascalCase depending on context | alias myString = string or alias MyPet = Pet |
decorators | camelCase | @format , @resourceCollection |
functions | camelCase | addedAfter |
file name | kebab-case | my-lib.tsp |
template parameter | PascalCase | <ExampleParameter> |
Layout convention
TypeSpec has a built-in formatter. See formatter section for more information on how to use it.
- Use 2 space indenting
// badmodel Pet { name: string;}
// goodmodel Pet { name: string;}
- Place a space before an opening curly brace
// badmodel Pet{ name: string;}
// goodmodel Pet { name: string;}
- Block opening curly brace
{
should be on the same line
// badmodel Pet{ name: string;}
// goodmodel Pet { name: string;}
- Add a newline after blocks
// badmodel Pet { name: string;}model Cat extends Pet {}
// goodmodel Pet { name: string;}
model Cat extends Pet {}
- Place no space between an operation/decorator/function name and the parameter list
// badop list (filter: string): Pet[];
// bad@doc ("This is a pet")
// goodop list(filter: string): Pet[];
// good@doc("This is a pet")
- Do not add spaces inside parentheses
// badop list( filter: string ): Pet[];
// goodop list(filter: string): Pet[];
- Add spaces inside curly braces.
// badalias foo = {type: "cat"};
// goodalias foo = { type: "cat" };
- Do not add space inside square brackets
// badalias foo = [ 1, 2, 3 ];
// goodalias foo = [1, 2, 3];
- Start all comments with a space
//bad
// good
- Avoid trailing spaces at the end of lines.
Model layout
- Properties should hug each other unless they have decorators or comments
// badmodel Foo { one: string;
two: string;
three: string;}
// goodmodel Foo { one: string; two: string; three: string;}
- Wrap properties in new lines if they have leading comments or decorators
// badmodel Foo { one: string; @doc("Foo") two: string; // line comment three: string; /** * Block comment */ four: string; five: string;}
// goodmodel Foo { one: string;
@doc("Foo") two: string;
// line comment three: string;
/** * Block comment */ four: string;
five: string;}