Seiji Villafranca
github.com/SeijiV13
seijivillafranca.com
by
github.com/SeijiV13
Senior Developer, KPN Netherlands
Microsoft MVP
Community Lead, AngularPH, Azure Philippines
Author
seijivillafranca.com
programming language which was developed by Microsoft. It is free, open source and superset of the JavaScript
October 2012
Anders Hejlsberg,
the lead architect of c#,
version 0.8
Absence of IDE support
Eclipse (plugin by Palantir)
Text Editor (Sublime etc.)
Tyepscript 0.9 supports Generics
Tyepscript 1.0
2013
2014
Prototypes
Dynamic Types
Generics
Interfaces
Types
class Student {
fullName: string;
constructor(public firstName: string, public middleInitial: string,
public lastName: string) {
this.fullName = firstName + " " + middleInitial + " " + lastName;
}
}
interface Person {
firstName: string;
lastName: string;
}
let user = new Student("Jane", "A", "Doe");Transpiler
Target: ES6/ES5
Browsers don't understand Typescript
https://www.npmjs.com/package/typescript
Why
highlights errors at compilation time during the time of development
namespace concept by defining a module
strongly typed or static typing
Features
Types
Any
Built-in types
User Defined Types
number, string, boolean, void, null, undefined
Arrays, Enums, Classes, Interfaces
Features
Union Types
ability to combine one or two types
var val:string|number
val = 12
val = "This is a string"
Features
Interfaces
interface IPerson {
firstName:string,
lastName:string,
sayHi: ()=>string
}
var employee:IPerson = {
firstName:"Jim",
lastName:"Blakes",
sayHi: ():string =>{return "Hello!!!"}
}
using Iperson Interface
Features
Classes
class Car {
//field
engine:string;
//constructor
constructor(engine:string) {
this.engine = engine
}
//function
disp():void {
console.log("Engine is : "+this.engine)
}
}
Features
Objects
var object_name = {
key1: “value1”,
key2: “value”,
key3: function() {
//functions
},
key4:[“content1”, “content2”]
};
Features
Access Modifiers
Public
Private
Protected
within class in subclass outside class
Yes
Yes
Yes
Yes
No
No
Yes
No
Yes
Features
Access Modifiers
class Employee {
public empId : number;
private empName: string;
protected age: number;
}
class Person Extends Employee {
// age is accessible here since Person is a subclass
getAge() {
return this.age;
}
}
// outside class
let employee = new Employee();
// empId is only accessible here
employee.empId
Features
Accessors
get and set keyword
set fullName(newName: string) {
const name = newName.split(" ");
this.firstName = name[0];
this.lastName = name[1];
}
let passcode = "secret passcode";
class Employee {
private firstName: string;
private lastName: string;
}
get fullName(): string {
return `${firstName} {lastName}`;
}
// getter
// setter
Features
Overloading
multiple methods with the same name
The function name is the same
The number of parameters is different in each overloaded function.
The number of parameters is the same, and their type is different.
The all overloads must have the same return type.
Features
Overloading
multiple methods with the same name
class Hero
{
function add(a:string, b:string): string;
function add(a:number, b:number): number;
//Function Definition
function add(a: any, b:any): any {
return a + b;
}
}
Features
Inheritance
create a new class from an existing class
Code Reusability
class Hero {
name: string;
constructor(name: string) {
this.name = name;
}
}
class SpiderMan Extends Hero {
powers: Array<String> = [];
constructor(name: string, powers: Array<String>) {
super(name);
this.powers = powers;
}
}
Features
Namespaces
logical grouping of functionalities
//namespace file: employeeSalary.ts
namespace employeeSalary {
export function calcSalary() {
// implementation
}
}
<reference path="./employeeSalary.ts">
employeeSalary.calcSalary();
Features
Modules
also used for grouping of related variables, functions, classes and inerfaces, also known as the external module
import { className } } from 'module';
export class EmployeeName {
}
// creating a module using the export word
// importing a module to another file
Features
Decorators
Duck-Typing
Map
Arrow Function
Where is TypeScript now?
https://www.typescriptlang.org/community
Other features of TypeScript you may not know
might be useful in Angular?
class Hero{
#name = Peter Parker;
constructor(public name: string) {}
}
If you need private properties at runtime, we can prepend a # in our variable
use the ?? for checking the variable lets say:
checks the value if it is === to undefined or null
x ?? y
will return x if x is not === null and undefined
will return y if x is === to null or undefined
let coffee = "kopiko";
return coffee ?? false; // returns value kopiko since it is not null and undefined;
Common way
used for property checking if undefined or null upon being accessed
if(obj1 && obj1.prop1 && obj.prop1.prop2) {
}
if(obj1?.prop1?.prop2) {
}
Optional Chaining ?
Common way
shorhand for Math.pow(), works with the BigInt() values
Math.pow(2, 4) // result 16
2 ** 4 // result 16
Exponentation **
for number readablity
const number_one = 912345678;
const number_two = 912_345_678;
console.log(number_one=== number_two); // true
// a &&= b, also equivalent to:
if (a) {
a = b;
}
// a ||= b, also equivalent to:
if (!a) {
a = b;
}
// a ??= b, also equivalent to:
if (a === null || a === undefined) {
a = b;
}
Start Coding
https://www.typescriptlang.org/docs/
Start Coding
https://www.typescriptlang.org/play
github.com/SeijiV13
seijivillafranca.com
fb.com/seiji.villafranca