TypeScriptさわるぞー #TODO

jsを大きな規模でもちゃんと動くようにしたいと、のたまったので、 偉い人たちが作ったaltjsを勉強させてもらいます ref http://kfly8.hatenablog.com/entry/2013/11/16/005340

#発火村 中、id:gfx 先生におすすめしてもらったTypeScriptを見てみます><

ぱっと見: # TODO

  • jsのsuperset
  • 見た目はほとんど一緒
  • I/Fに型を添えて分かりやすくしている

導入

% npm install -g typescript
% cat > hello.ts
function hello(s: string) {
  return 'hello ' + s;
}
console.log(hello('typescript'));
^D
% tsc hello.ts
% node hello.ts

grunt-typescrpt

npm install grunt-typescript
https://github.com/kfly8/ts-sample

TypeScriptのドキュメントのメモ

Types

// primitive type. ( number, boolean, string, void, null and undefined and user defined enum types)
function hello(str: string) {
    return 'hello' + str;
}

// function type
function hoge(callback: (result: string) => any ) {
    ...
}

hoge(function(result: string) {
    ...
});

// object type

// * object type literal ( ObjectType,ArrayType,FunctionType and ConstructorType  )
var aaa: () => {
    x: number; y: number;
};

// * object type interface // PerlのMouseTypeみたい
interface Friend {
    name: string;
    birthday?: string; # optional field
}

function add(friend: Friend) {
    var name = friend.name;
}

add({ name: 'taro' });
add({ birthday: '20130101' }); # error, name required
add({ name: 'hanako', birthday: '20130201' });


// Structial Subtypes

interface Point {
    x: number;
    y: nubmer;
}

function getX(p: Point) {
}

Class CPoint {
    x: number;
    y: number;
    constructor(x: number, y: number) {
        this.x = x;
        this.y = y;
    }
}

getX(new CPoint(0,0)); // ok!!
getX({ x: 1, y: 2: z: 3); // ok!! Extra fields ok
getX({ x: 1 ); // ng!! supplied parameter's not Point

Class && Module

class Animal {
    constructor(public age: number) {
    }
    addAge(amount: number) {
        this.age += amount;
        return this.age;
    }
}
var Animal = (function () {
    function Animal() {
        this.age = 0;
    }
    Animal.prototype.addAge = function(amount) {
        this.age += amount;
        return this.age;
    };
    return Animal;
})();
module Hoge {
    var s = "hello";
    export function f() {
        return s;
    }
}

Hoge.f();
Hoge.s; // Error, s is not exported // variable 's' is private
var Hoge;
(function(exports) {
    var s = "hello";
    function f() {
        return s;
    }
    exports.f = f;
})(Hoge||(Hoge={}));

declare

declare var document;
document.title = "Hello";

外部モジュール

# File main.ts:
import log = require("log");
log.message("hello");

# File log.ts:
export function message(s: string) {
    console.log(s);
}

# point.ts
export = Point;
class Point {
    constructor(public x: number, public y: number) { }
    static origin = new Point(0, 0);
}

# use
import Pt = require("point");
var p1 = new Pt(10, 20);
var p2 = Pt.origin;

温泉発火村なう

#発火村 !!!!!!!!!!!

comments powered by Disqus