2017-01-28 4 views
1

私はモジュールを次ています[Typescript]:型に名前空間の値を使用する方法は?

a.ts

export namespace METHODS { 

    export const GET = 'get'; 

    export const POST = 'post'; 

    export const PUT = 'put'; 

    export const DELETE = 'delete'; 

} 

b.ts

import { METHODS } from './a.ts'; 

export interface Route { 
    method: METHODS.GET | METHODS.POST; 
} 

をこれが動作していない、と私はエラーを得た:

Namespace '"a".METHODS' has no exported member 'GET'

私は使い方が間違っていますか? Typescriptバージョンiは次のとおりです。2.1.5

答えて

2

そして以下は、私が見るきれい

export namespace METHODS { 

    export const GET = 'get'; 

    export type GET = typeof GET; 

    export const POST = 'post'; 

    export type POST = typeof POST; 

    export const PUT = 'put'; 

    export type PUT = typeof PUT; 

    export const DELETE = 'delete'; 

    export type DELETE = typeof DELETE; 
} 
+1

これは本当に欲しいです、感謝@Aluan Haddad。しかし、この方法はちょっと変わったようですね。 ^^ – Howard

+0

ええ、それはちょっと奇妙です:]しかし、APIの観点から見ると使いやすいです。文字列列挙を要求するTypeScriptリポジトリには多くの問題があります。将来このようなことを表現するためのよりエレガントな方法があると思われますが、将来のバージョンの言語ではより一般的な高次型構造のアプリケーションになるでしょう。 –

1

Constは型ではなく、型としてconstを使用できません。あなたがあなたのアプリの別の部分を壊していない場合は、型のconstを交換することができます。あなたがタイプとして、および値として直接それらを使用したい場合は

export namespace METHODS { 
    //export const GET = 'get'; 
    export type GET = 'get'; 
    export type POST = 'post'; 
    export type PUT = 'put'; 
    export type DELETE = 'delete'; 
} 
+0

に動作します。ありがとう@ミサズ。それは私がts ^^についてもっと多くのドキュメントを読む必要があることを思い出します。 – Howard

+0

'Constは型ではなくconst型では使用できないためですが、' typeof'を使うと型を持ちます。また、タイプと値のスペースの名前は、常に重なり合う可能性があります。 –

関連する問題