Created by gavinxgu
“TypeScript is an open-source programming language developed and maintained by Microsoft. It is a strict syntactical superset of JavaScript, and adds optional static typing to the language.” -- Wikipedia
TypeScript是Microsoft开发和维护的一种开源编程语言。他是JavaScript的一个严格的语法超集,并增加了可选的静态类型。
let isDone: boolean = false; // Boolean
let decimal: number = 6; // Number
let color: string = "blue"; // String
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3]; // Array
let x: [string, number] = ["hello", 10]; // Tuple
enum Color {Red, Green, Blue};
let c: Color = Color.Green; // Enum
let notSure: any = 4; // Any
let unusable: void = undefined; // Void: you can only assign undefined or null to them
let u: undefined = undefined; // Undefined
let n: null = null; // Null
function error(message: string): never {
throw new Error(message);
} // The never type represents the type of values that never occur
declare function create(o: object | null): void; // Object
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length; // Type assertions
interface Name {
firstName: string;
lastName: string;
}
interface MiddleName extends Name {
middleInitial: string;
}
interface Person {
name: MiddleName;
sex: "male" | "female";
age: number;
}
class Student implements Person {
static isStudent: true;
public age: number;
get fullName() {
return (
this.name.firstName +
" " +
this.name.middleInitial +
" " +
this.name.lastName
);
}
constructor(
public name: MiddleName,
age: number,
public sex: "male" | "female" = "male",
public job?: string
) {
this.age = age;
}
}
function fullName(
firstName: string,
lastName: string,
middleInitial?: string): string {
return firstName + (middleInitial || '') + lastName
}
fullName('Xiang', 'Gu') // correct
fullName('Xiang', 'Gu', 'Gavin') // correct
// call signature of object
interface GenericIdentityFn {
<T>(arg: T): T;
}
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: GenericIdentityFn = identity;
// Generic Classes
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
// Generic Constraints
function loggingIdentity<T extends { length: number; }>(arg: T): T {
console.log(arg.length);
return arg;
}
// Using Class Types in Generics
function createInstance<A extends Animal>(c: new () => A) {
return new c();
}
createElement <K extends keyof HTMLElementTagNameMap>(tagName: K, options?: ElementCreationOptions): HTMLElementTagNameMap[K];
interface HTMLElementTagNameMap {
"a": HTMLAnchorElement;
"abbr": HTMLElement;
"address": HTMLElement;
}
document.createElement("a") // 这里会推断为HTMLAnchorElement
// .es6.js
class Student {
constructor(name, age, sex = "male", job) {
this.name = name;
this.sex = sex;
this.job = job;
this.fullName =
name.firstName + " " + name.middleInitial + " " + name.lastName;
this.age = age;
}
}
// .d.ts
declare class Student implements Person {
name: MiddleName;
sex: "male" | "female";
job?: string;
fullName: string;
age: number;
constructor(name: MiddleName, age: number, sex?: "male" | "female", job?: string);
}
interface Person {
name: MiddleName;
sex: "male" | "female";
age: number;
}
interface MiddleName extends Name {
middleInitial: string;
}
interface Name {
firstName: string;
lastName: string;
}