2017-06-10 11 views
2

私はTypescriptを使い慣れていますが、これを行うにはさまざまな方法を探していますが、私は立ち往生しています。Typescriptで関数のコレクションをエクスポートする

私はどこでもインポートできる無関係の関数のコレクションを含むライブラリファイルを作成したいと思います。

let libraryFunctions = {}; 
libraryFunctions.a =() => { 
    return true; 
} 
module.exports = libraryFunctions; 

しかし、活字体で私は苦情がProperty 'a' does not exist on type {}を言ってもらう:通常のJavaScriptで、私はこれに似た何かを行うことができます。 (活字体のクラスの私の理解が間違っている場合がない限り)

interface ILibraryFunctions { 
    a(): boolean; 
}; 

export class LibraryFunctions implements ILibraryFunctions { 
    a =() => { 
    return false; 
    } 
} 

しかし、クラスを作成することはあまりにも過大であると考えられる:私は、私はこれに似た何かができました。誰かが正しい方向に私を指すことができるだろうか?

ありがとうございます!活字体で

答えて

3

、あなただけのexportあなたが望むものは何でも、同様に(もバベルによって実装されている)ES2015モジュールへ:

export function a() { 
    return true; 
} 

// or alternatively 

export const b =() => false 

その後、別のファイル

import {a, b} from './thatFirstFile'; 
// or 
import * as libraryFunctions from './thatFirstFile'; 

ようで具体的なシナリオでは、クラスを実装する必要はありません。

interface ILibraryFunctions { 
    a(): boolean; 
}; 

const myLib: ILibraryFunctions = { 
    a() { return true; } 
}; 

export default myLib; 
言っ

は、答えの一番上に述べた方法は、あなたは、あなたが直接、デフォルトの輸出と思いませんexport defaultオブジェクトaとなりa自体、現実的にDaniel's comment below:

から、好適です。つまり、書かれていることをやらない理由は、既存のツールが実際のオブジェクトからではなく、トップレベルのエクスポートからより簡単にツリーシェイクできるということです。さらに、最初の構文を使用すると、複数のエクスポートがある場合にES2015の名前付きインポート構文を使用できます。

+0

ありがとうございました!最初の方法が好ましい理由の裏にある理由は何ですか? – user3781239

+2

現実的には、 'a'を使ってオブジェクトを' default'にエクスポートしないと、 'a'自身を直接デフォルトにエクスポートします。つまり、書かれていることをやらない理由は、既存のツールが実際のオブジェクトからではなく、トップレベルのエクスポートからより簡単にツリーシェイクできるということです。さらに、最初の構文を使用すると、複数のエクスポートがある場合にES2015の名前付きインポート構文を使用できます。 –

+0

@DanielRosenwasserありがとう、これは素晴らしい点です。私は、可視性を高めるために答えに加えました。 –

関連する問題