TypeScript (Microsoft)

MakeTypes from JSON samples:
https://jvilk.com/MakeTypes/


Linter documenttion https://palantir.github.io/tslint/

VisualStudoCode plugin for typescript:
https://marketplace.visualstudio.com/items?itemName=eg2.tslint


-- tsconfig can be generated by
$ tsc --init

-- if error js file will not be generated
"noEmitOnError": true


$ vi app.ts


[0,1,2].map((num) => num);


# npm install -g grunt-cli

$ npm init -y
$ npm install --save-dev grunt grunt-ts grunt-tslint tslint typescript


$ vi tslint.json


{
    "EXTENDS": [
        "tslint:recommended"
    ],
    "rules": {
        "only-arrow-functions": true
    }
}


$ vi Gruntfile.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
module.exports = function(grunt) {
grunt.initConfig({
ts: {
default : {
src: ['*.ts', '!node_modules/**']
}
},
tslint: {
options: {
configuration: 'tslint.json'
},
files: {
src: ["*.ts"]
}
}
});

grunt.loadNpmTasks('grunt-ts');
grunt.loadNpmTasks('grunt-tslint');
grunt.registerTask('default', ['ts', 'tslint']);
};


$ grunt


Using Jasmine to Unit Test Your Code

$ npm install --save jasmine

$ jasmine init

$ vi spec/support/jasmine.json


$ vi product.ts


https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec2/code/video3/product.ts


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
export class Product {
private name: string;
private price: number;
constructor(name, price) {
this.name = name;
this.price = price;
}

getName(): string {
return this.name;
}

getPrice(): number {
return this.price;
}

getDiscountedPrice(discount): number {
return this.price - (this.price \* discount / 100);
}
}


$ tsc product.ts


$ vi spec/product-spec.js

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec2/code/video3/spec/product-spec.js


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const productModule = require('./../product.js');

describe('Product Unit test', () => {
let product;
beforeEach(() => {
product = new productModule.Product('football', 100);
})

it('should return the product name', () => {
expect(product.getName()).toBe('football');
});
it('should return the product price', () => {
expect(product.getPrice()).toBe(100);
});
it('should return the exact product price', () => {
expect(product.getPrice()).not.toBe(110);
});
it('should return 10% discount price', () => {
expect(product.getDiscountedPrice(10)).toBe(90);
});
it('should return 50% discount price', () => {
expect(product.getDiscountedPrice(50)).toBe(50);
});
});


$ jasmine


Karma - test runner

$ npm install jasmine-core karma-chrome-launcher karma-typescript karma

$ karma init

$ vi karma.conf.js


***

frameworks: ['jasmine', 'karma-typescript'],

***

preprocessors: {
'*.ts': ['karma-typescript']
},


$ vi product-test.ts

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec2/code/video4/product-test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import { Product } from './product';

describe('Product Unit test', () => {
let product;
beforeEach(() => {
product = new Product('football', 100);
})

it('should return the product name', () => {
expect(product.getName()).toBe('football');
});
it('should return the product price', () => {
expect(product.getPrice()).toBe(100);
});
it('should return the exact product price', () => {
expect(product.getPrice()).not.toBe(110);
});
it('should return 10% discount price', () => {
expect(product.getDiscountedPrice(10)).toBe(90);
});
it('should return 50% discount price', () => {
expect(product.getDiscountedPrice(50)).toBe(50);
});
});  

$ karma start –single-run

PhantomJS

https://stackoverflow.com/questions/45369418/karma-typescript-cant-find-variable-exports

https://github.com/saurabhranjansingh/UnitTestingKarmaMocha

$ npm install --save-dev karma-spec-reporter

$ vi karma.conf.js


reporters: ['spec', 'coverage'],

$ karma start --single-run --log-level debug
$ karma start

=======================================


3 - Task Automation


09-Using Grunt to Auto-Compile TypeScript


$ vi Gruntfile.js

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video01/Gruntfile.js


$ vi tsconfig.json

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video01/tsconfig.json


$ vi product-class.ts

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video01/product-class.ts


$ vi product-class.ts

https://raw.githubusercontent.com/marley-js/Mastering-TypeScript-Programming-Techniques/master/Sec3/code/video01/product.ts

$ npm install --save-dev grunt-contrib-watch

$ grunt


10-Auto-Compile and Auto-Build TypeScript Files


$ vi tsconfig.json

https://raw.githubusercontent.com/marley-js/Mastering-TypeScript-Programming-Techniques/master/Sec3/code/video02/tsconfig.json

$ vi app.ts

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video02/app.ts

$ tsc


11-Auto-Unit Testing Your TypeScript Application


$ vi tsconfig.json


https://raw.githubusercontent.com/marley-js/Mastering-TypeScript-Programming-Techniques/master/Sec3/code/video03/tsconfig.json


$ mkdir -p spec
$ vi spec/product-spec.js

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video03/spec/product-spec.js

$ jasmine spec/product-spec.js


$ npm install --save grunt-exec


$ vi Gruntfile.js

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video03/Gruntfile.js


Protractor (e2e testing tool) uses Selenium

jre/jdk (java) shoudl be installed.

# npm install -g protractor
# webdriver-manager update

$ webdriver-manager start


$ vi tsconfig.json


https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video04/tsconfig.json


$ vi conf.ts


https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/blob/master/Sec3/code/video04/conf.ts


$ vi spec.ts


https://raw.githubusercontent.com/marley-js/Mastering-TypeScript-Programming-Techniques/master/Sec3/code/video04/spec.ts

site:

https://github.com/webmakaka/Mastering-TypeScript-Programming-Techniques/tree/master/Sec3/code/video04/site

$ cd site
$ python -m SimpleHTTPServer 8080

$ tsc *.ts
$ protractor conf.js