For programs to be useful, we need to be able to work with some of the simplest units of data: numbers, strings, structures, boolean values, and the like.

Type Inference

In TypeScript, there are several places where type inference is used to provide type information when there is no explicit type annotation. For example, in this code

let x = 3;
let y = x + 3

The type of the x variable is inferred to be number. Similarly, the type of y variable also is inferred to be number. This kind of inference takes place when initializing variables and members, setting parameter default values, and determining function return types.

All the examples below give an example type annotation, but will work just the same without the annotation.


The most basic datatype is the simple true/false value, which is called a boolean value.

let isDone: boolean = false;


In JavaScript, numbers are floating point values. However, for the Chibi Chip, numbers are integer values.

Integer values can be specified via decimal, hexadecimal and octal notation:

let decimal: number = 42;
let hexadecimal: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;


String manipulation not supported


Arrays not supported


A helpful addition to the standard set of datatypes from JavaScript is the enum. As in languages like C#, an enum is a way of giving more friendly names to sets of numeric values.

enum Color {Red, Green, Blue}
let c: Color = Color.Green;

By default, enums begin numbering their members starting at 0. You can change this by manually setting the value of one of its members. For example, we can start the previous example at 1 instead of 0:

enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;

Or, even manually set all the values in the enum:

enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;


The TypeScript type any is not supported in the Chibi Chip.


void is the absence of having any type at all. You may commonly see this as the return type of functions that do not return a value:

function warnUser(): void {

Declaring variables of type void is not useful.

Null and undefined

A variable isn’t always set to a value. If you want a variable to exist but not have it set to a value of a type, it can be set to nothing, or null. This is often useful to indicate that a variable isn’t meaningful for evaluation at the moment.

if (encoder.active) {
    position = encoder.readPosition();
} else {
    position = null;

In a similar way, undefined indicates that a variable has no value:

let message: string = undefined;
let received = false;

while (!received) {
    message = ports.readString();
    if (message != undefined)
        recieved = true;
    } else {