2016-08-14 271 views
2

剛開始使用打字稿,我不能爲這個問題找到解釋...打字稿類如何定義沒有原型類功能

可以說我有功能

function test() { 
    function localAccessMethod() { 
     console.log('I am only accessable from inside the function :)'); 
    } 

    this.exposedMethod = function() { 
     console.log('I can access local method :P'); 

     localAccessMethod(); 
    } 
} 

而且我想將它轉換爲打字稿類......到目前爲止,我做了它在這裏:

class test { 

    constructor: {} 

    exposedMethod() { 
     console.log('I can access local method :P'); 

     localAccessMethod(); 
    } 

} 

我如何定義,在打字稿類的本地功能,所以它不會被暴露爲原型或。這.. 。?

或者更好的問題,我應該如何將源代碼轉換爲適合TypeScript標準。我想要的功能只適用於所有類的方法,但不會暴露...

回答

0

您不能在類中暴露一些不會暴露的東西,甚至私有/受保護的成員/方法也會暴露在JavaScript中,只有編譯器強制執行此可見性。

您有幾種選擇:

(1)有主要的一個內部的「內部」功能:

export class test { 
    constructor() {} 

    exposedMethod() { 
     console.log('I can access local method :P'); 

     function localAccessMethod() { 
      console.log('I am only accessable from inside the function :)'); 
     } 

     localAccessMethod(); 
    } 
} 

(2)如果這是一個模塊,然後將內部函數的該模塊的頂層部分,不導出:

function localAccessMethod() { 
    console.log('I am only accessable from inside the function :)'); 
} 

export class test { 
    constructor() {} 

    exposedMethod() { 
     console.log('I can access local method :P'); 

     localAccessMethod(); 
    } 
} 

(3)如果你不使用的模塊,然後換這個東西在一個命名空間和出口只有類:

namespace wrapping { 
    function localAccessMethod() { 
     console.log('I am only accessable from inside the function :)'); 
    } 

    export class test { 
     constructor() {} 

     exposedMethod() { 
      console.log('I can access local method :P'); 

      localAccessMethod(); 
     } 
    } 
} 
+0

感謝您詳細的解答。看起來像第三個選項最適合我的需求在這種情況下,因爲我想有多個私有方法,將共享未公開的功能,我還沒有使用模塊...謝謝Nitzan – Tautvydas

1

您可以使用private static關鍵字:

class Test 
{ 
    private static localAccessMethod() 
    { 
    console.log('I am only accessable from inside the function :)'); 
    } 

    exposedMethod() 
    { 
    console.log('I can access local method :P'); 
    Test.localAccessMethod(); 
    } 
}