(value:string, type: number): boolean;
interface TickInterface {
class DigitalClock implements TickInterface {
constructor(h: number, m: number) { }
// 抽象类做为其它派生类的基类使用。它们一般不会直接被实例化。不同于接口,抽象类可以包含成员的实现细节。abstract关键字是用于定义抽象类和在抽象类内部定义抽象方法。
abstract class MyAbstract {
constructor(public name: string) {}
console.log('say name: ' + this.name);
abstract sayBye(): void; // 必须在派生类中实现
class AccountingMyAbstract extends MyAbstract {
super('test'); // 在派生类的构造函数中必须调用 super()
let department: MyAbstract; // 允许创建一个对抽象类型的引用
department = new MyAbstract(); // 错误: 不能创建一个抽象类的实例
department = new AccountingMyAbstract(); // 允许对一个抽象子类进行实例化和赋值
department.getOther(); // 错误: 方法在声明的抽象类中不存在
// 函数,在参数名旁使用 ?实现可选参数的功能,可选参数必须跟在必选参数后面
function createName(firstName: string, lastName?: string) {
return firstName + " " + lastName;
function iSay<T>(arg: T): T { // 整体使用泛型
let come = iSay<number>(123);
function iSay<T>(arg: T[]): T[] { // 局部使用泛型
interface SayLoveArg<T> { // 把泛型参数当作整个接口的一个参数
let mySay1:SayLove = iSay
let mySay2:SayLoveArg<number> = iSay
compute: (x: T, y: T) => T;
let myGenericNumber = new MyNumber<number>();
interface NumberControl {
class MyObject<T extends NumberControl>(arg: T):T {
function extend<T, U>(first: T, second: U): T & U {
let result = {} as T & U; // <T & U>{}
(<any>result)[id] = (<any>first)[id];
if (!result.hasOwnProperty(id)) {
(<any>result)[id] = (<any>second)[id];
let name: string | number = 'test';
public constructor(number = 0) { }
public add(n: number): this {
public multiply(n: number): this {
let AnimalProps: keyof Animal; // 'cat' | 'dog'
interface TestInterface {
type MyType = TestInterface[keyof TestInterface]; // 通过[]索引类型访问操作符, 我们就能得到某个索引的类型
// 命名空间-主要作用是用来组织代码,以便于在记录它们类型的同时还不用担心与其它对象产生命名冲突。
export interface Selectors {
(selector: string): Selection;
(element: EventTarget): Selection;
export interface Base extends Selectors {
npm install --save lodash @types/lodash
import * as _ from "lodash"; // 在代码中使用
_.padStart("Hello world!", 2, " ");
// 声明文件-使用未经声明的全局函数或者变量, typescript会报错, 可以添加xxx.d.ts文件, 并在里面声明所需变量, ts会自动检索到该文件并进行解析。
declare var name: string;// 1. 声明全局变量
declare function say(name: string): void;// 2. 全局函数
declare namespace myObj {// 3. 带属性的对象
function say(s: string): string;
interface Animal {// 4. 可重用的接口
declare function findAnmiate(animal:Animal):void;