hydrogen-web/doc/TS-MIGRATION.md
RMidhunSuresh 5ef7ab32df Update doc
2021-12-10 12:09:18 +05:30

1.7 KiB

Typescript style guide

Use type rather than interface for named parameters and POJO return values.

type and interface can be used somewhat interchangeably, but let's use type to describe data and interface to describe (polymorphic) behaviour.

Good examples of data are option objects to have named parameters, and POJO (plain old javascript objects) without any methods, just fields.

Also see this playground

Use type foo = { [key: string]: any } for types that you intend to fill in later.

For instance, if you have a method such as:

    function load(options) {
        // ...
    }

and you intend to type options at some later point, do:

    type Options = { [key: string]: any}

This makes it much easier to add the necessary type information at a later time.

Use object or Record<string, any> to describe a type that accepts any javascript object.

Sometimes a function or method may genuinely need to accept any object; eg:

function encodeBody(body) {
    // ...
}

In this scenario:

  • Use object if you know that you will not access any property
  • Use Record<string, any> if you need to access some property

Both usages prevent the type from accepting primitives (eg: string, boolean...). If using Record, ensure you have guards to check that the properties really do exist.