2013-05-30 23 views
0

我正在尋找一種方法來創建一個功能,創建2個其他功能作爲自我功能。Typescript將自我返回一些函數?

var anyVariable = createMeFunc(); 

public createMeFunc(): string {  

    var setFunc = (value: any) => { 
     console.log("set function"); 
    } 
    var getFunc =(): string => { 
     console.log("get function"); 
     return "returnVal"; 
    } 
    return setFunc, getFunc; 
} 

anyVariable("someValue"); //calls setFunc 
anyVariable(); //calls getFunc, returns "returnVal" 

這只是一個例子,如果有什麼不清楚,我很高興爲您的反饋。

回答

2

非ES5的解決辦法是這樣的:

interface Foo { 
    (): any; 
    (value: any): void; 
} 

function createFoo(): Foo { 
    var getFunc =() => { console.log("get"); return "foo"; } 
    var setFunc = (value: any) => { console.log("set"); } 

    return (value?: any) => { 
     if (typeof value === 'undefined') { 
      setFunc(value); 
     } else { 
      return getFunc(); 
     } 
    } 
} 

var f = createFoo(); 
f("bar"); 
f(); 
+0

公共createFoo(){(價值?):任何;這也應該是有效的?但編譯器不會通過設置f(「」,「」)來顯示任何錯誤。編譯器是否顯示任何智能感知? –

+0

@Abc這段代碼對我來說毫無意義 - 你可以嘗試解釋你正在做什麼嗎? - 'f(「」,「」)'應該會導致編譯器警告,因爲參數的數量與f的任何特徵都不匹配。 – Niko

+0

您應該真的使用if(typeof value ==='undefined'),因爲false或0可能是傳遞給setter的有效值。 –

1

如果你正在尋找的EcmaScript 5 getter和setter方法:

var foo = new Foo(); 

class Foo{ 
    get anyVariable():string{ 
     console.log("get function"); 
     return "returnVal"; 
    } 
    set anyVariable(string){ 
     console.log("set function"); 
    } 
} 

foo.anyVariable="someValue"; //calls setFunc 
var x = foo.anyVariable; //calls getFunc, returns "returnVal" 

See it in typescript playground

相關問題