Skip to content

Instantly share code, notes, and snippets.

@co1rowjp
Created December 12, 2012 04:30
Show Gist options
  • Save co1rowjp/4264876 to your computer and use it in GitHub Desktop.
Save co1rowjp/4264876 to your computer and use it in GitHub Desktop.
typescript. I want's to write pattern match....
interface Matcher {
caseA (any): any;
caseB (any): any;
caseAny (any): any;
}
class Parent {
data: any;
constructor (data: any) {
this.data = data
}
match (matcher : Matcher) {
if (this instanceof A) {
return matcher.caseA(this.data)
} else if (this instanceof B) {
return matcher.caseB(this.data)
} else {
return matcher.caseAny(this.data)
}
};
}
class A extends Parent {
}
class B extends Parent {
}
var a = new A("I'm a")
a.match({
caseA:(data: any) => { console.log("this is A:" + data)},
caseB:(data: any) => { console.log("this is B:" + data)},
caseAny:(data: any) => { console.log("any!:" + data)}
})
var b = new B("I'm b")
b.match({
caseA:(data: any) => { console.log("this is A:" + data)},
caseB:(data: any) => { console.log("this is B:" + data)},
caseAny:(data: any) => { console.log("any!:" + data)}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment