2015-09-25 21 views
23

Çeşitli yardımcı işlevlerim var. Bunları paketlemenin ve sonra onları içe aktarmanın en iyi yolu nedir? Sonra sınıftaYardımcı program sınıfı nasıl yapılandırılır

import * as util from './util' 

export class myClass{ 
    constructor() 
    { 
      util.doSomething("test"); 
    } 
} 

: VS aldığım

export class Util{ 
    doSomething(val: string){ return val;} 

    doSomethingElse(val: string{ return val;} 
} 

hata mesajı Mülkiyet doSomething tipi util mevcut değil" dir

Bu benim yapmaya çalıştığım budur. "

cevap

38

o zaman böyle istemci kodu kolaylaştırabilirsiniz

export default class Utils { 
    static doSomething(val: string) { return val; } 
    static doSomethingElse(val: string) { return val; } 
} 

içeren bir dosya utils.ts oluşturursanız:

import Utils from './utils' 

export class MyClass { 
    constructor() 
    { 
     Utils.doSomething("test"); 
    } 
} 
+2

Şimdi bunu yapmayı tercih ettiğim yol bu. –

+0

Yöntemler statik mi olmalı? Utils sınıfı örneği oluşturulamadı mı? – user728630

+1

@GregGum Vatansızlık işlevlerinizi bir sınıfta sarmak sadece kötü bir fikir çünkü ağaç-sallama gibi modül optimizasyon tekniklerini kırıyor. Her şeyi mümkün olduğunca modülün en üst seviyesine yakın olarak ihraç etmelisiniz. –

18
burada bir kaç sorun yok

: Eğer import * as util, util modülü, değil onun içinde bir nesne temsil yaptığınızda

  1. Sen başlatmasını değiliz şey ve doSomething bir örnek yöntemi
  2. olduğunu. Eğer Util istiyorsanız

, sadece o içe olmalıdır: kodunuzu yamalı oluyor İşte

var u = new Util(); 
u.doSomething("test"); 

:

import { Util } from './util' 

Sonra, nihayet üzerinde yöntemini çağırmadan önce, Util örneğini gerekir yukarı:

import { Util } from './util' 

export class MyClass{ 
    constructor() 
    { 
     var u = new Util(); 
     u.doSomething("test"); 
    } 
} 

Tüm söyledikleriniz, araçlarınızı kullanma şekliniz hakkında garip bir şey var gibi görünüyor. Bu tamamen kişisel bir düşüncedir, ama bir kurucuda "bir şeyler yapmak", yani yan etkilere neden olan yöntemleri çağırmayacağım.

Ayrıca, Util'daki yöntemler, sınıfa bağlı olmadıkları bir durumda olmadıklarından, bu sınıfta olmaları gerektiği gibi görünmüyor. Her zaman düzenli işlevleri bir modülden dışa aktarabilirsiniz. doğrudan işlevlerini ihraç olurdu ve örnekleme güçlük kaçınmak olur ve olduğu gibi aslında orijinal kodu doğru çalışacak

export function doSomething(val: string) { return val; } 

export function doSomethingElse(val: string) { return val; } 

: Bu gibi utils modülü yazsaydım.

+0

teşekkür ederiz. Evet, 'ihracat işlevi ...' yapmaya çalıştığım şey. –

+0

Util modülleri, 'new' anahtar sözcüğüyle örnek olarak başlatılmamalıdır. Standart kurallara uymak ve yürütme içeriği oluşturmayı azaltmak istiyorsanız, Util sınıf yöntemleri, "Util.doSomething()" – Ryan

+0

@Ryan yoluyla erişilen statik yöntemler olmalıdır. Yanlışsınız. Dışa aktarmakta olduğunuz işlevsellik bazı duruma bağlıysa, bunu anında bir sınıf olarak dışa aktarmalısınız. Vatansızsa, bu durumda olduğu gibi, * bunu en üst düzey bağımsız ihracat olarak ihraç etmelisiniz *. Onları bir sebepten ötürü statik bir sınıfa sokarsanız, kendinize hiçbir yararı olmadığı için ağaç çalkalamanızı kırarsınız. –

İlgili konular