forked from mystiq/hydrogen-web
1.7 KiB
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 that you have guards to check that the properties really do exist.