Type Script

How to set up TypeScript for Gameface

TypeScript is a widely-used tool for type-checking, auto-completion and code validation. It is especially useful for Gameface because it allows you to set up your development environment to be specifically tailored to the Cohtml library, thus helping ease learning the various supported, unsupported, or extra features it provides compared to a typical web browser.

Installation

You can install typescript via

npm i -g typescript

Using TypeScript definitions

You can find all files listed below inside the Samples\uiresources\library\ folder of your Gameface package. The contents of the folder are as follows:

  • DOM TypeScript definitions (cohtml.lib.dom.d.ts) - these definitions contain the DOM properties implemented in Gameface
  • Cohtml.js typescript definitions (cohtml.d.ts) - this file contains extra definitions, used by the Cohtml library for features such as databinding
  • The cohtml.js file itself - the exact version of this file used to generate the definitions

You need to add your own tsconfig.json file to this folder as well, in which you need to specify the index.js file used in your game. In this case, we assume that index.js is some “main” file in your game UI.

tsconfig.json

{
    "files": [
        "src/index.js"
    ],
    "compilerOptions": {
        "outDir": "dist",
        "lib": [
            "ES5",
            "ES2015.Iterable",
            "ES2015.Promise",
            "ES2015.Core"
        ],
        "allowJs": true,
        "checkJs": true,
        "noEmit": true,
        "module": "ES2015",
        "target": "es2015",
        "allowSyntheticDefaultImports": true,
    },
    "include": [
        "lib/**/*.d.ts"
    ],
    "exclude": [
        "node_modules",
        "**/*.spec.ts"
    ]
}

The lib option allows you to specify which of the default library definitions we want to use. We don’t need the DOM definitions that TypeScript comes with because we’ll use the ones for Gameface.

The file structure should look similar to this:

|-tsconfig.json
|
+---lib
|   |   cohtml.lib.dom.d.ts
|   |   cohtml.d.ts
|
\---src
    |    index.html
    |    index.js
    |    cohtml.js

You can now directly import the cohtml.js inside index.js.

import './cohtml.js';

If you receive the following error inside cohtml.js - Cannot find name 'global' then you need to run the npm install @types/node --save-dev command in your root folder.

That’s it. You should be good to go. You can now use tsc to run a type check. If your IDE supports IntelliSense you’ll see the errors even before compilation.

ESLint with TypeScript and React

When you are using TypeScript with React project and you have configured ESLint make sure to disable the no-undef rule. If this rule is not disabled then the linter may show an error that 'engine' is not defined.

.eslintrc.json

    {
        ...
        "rules": {
            ...
            "no-undef": "off",
            ...
        }
    }