For Typescript Users

mitter.io SDKs are compiled with typescript 3.0.3, but target typescript 2.7.+ Versions of typescript below 2.7 might work, but are not supported.

All mitter.io web/javacsript SDKs are written in typescript and as such are bundled with typings automatically. This section details on how to optimally use the mitter.io libraries if you are using typescript.

Type-matching functions

If you are using type-matching functions to get the type of a payload for example, the functions are implemented as predicates, so typescript will automatically cast it within the branch. For example:

mitter.subscribeToPaylod(payload => {
    if (payload['@type'] === 'NewMessagePayload') {
        // The next line will throw an error, since the type of
        // payload is MessagingPipelinePayload
        console.log('New message', payload.message.textPayload)
    } else {
        // The next will not throw an error, since the callback
        // argument is already typed to MessagingPipelinePayload
        console.log('New payload', payload.globalPipelinePayloadId)
    }
})

Instead, if you were to use the bundled type-matching functions:

mitter.subscribeToPayload(payload => {
    if (isNewMessagingPayload(payload)) {
        // The next line is OK, since the isNewMessagingPayload is a type
        // predicate, which tells the compiler that if true, then the
        // argument (payload) was of type NewMessagingPayload
        console.log('New message', payload.message.textPayload)
    }
})

API calls using clients

All bundled clients are typed and will throw an error when using incorrect request/response values

mitter.clients().channels().newChannel({
    // ERROR. Missing property 'defaultRuleSet'
    channelId: 'my-new-channel'
})

mitter.clients().channels().newChannel(new Channel(...))
    // ERROR. No property `wrongProperty` on type Channel
    .then(x => console.log('New channel', channel.wrongProperty)

NOTE The above does not apply if you are using fetch and/or axios to make API calls. The internal clients that are used with restyped are exposed in case you wish to use them with your own axios clients. Do refer to the ts-docs bundled with @mitter-io/core on how to access these objects.

Last updated