2017-06-02 9 views
0

私は文字列の使用法を、翻訳されたメッセージとリテラルテキスト値の識別子として分離する最良のソリューションを探しています。プリミティブのフロータイプ名義型入力

だから私は、オブジェクトのフィールドは、この場合には、フォームのタイトルを指し、それはそれは、ローカライズされた文字列を参照すると、同様に関数に渡される値SIGNUP_FORM_TITLEまたはMAIL_FORM_TITLEを持っているであろう、titleと呼ばれている場合がありますformat(id)現在のロケールの実際のローカライズされたテキストを返します。

しかし、人物の名前を参照するローカライズされていないオブジェクトフィールドnameがあるかもしれないので、値はJohn Doeです。

プレーン(テキスト)文字列が必要なAPIにtitleを渡すと、私はフォーマット(id)に名前を渡すときにタイプエラーが発生することがあります。

私は(もちろん)type LocalizationIdentifierType = stringというだけではエイリアスではありません。

おそらく私は文字列class LocalizationIdentifier extends Stringのサブクラスを作ることができましたが、これはまだLocalizationIdentifierが文字列ベースのAPIに渡されることを許可します(または少なくとも私はそう考えています)。

名目上文字列を並べ替える方がいいですか? または、私は完全に間違ったトラックにいるのでしょうか? (私たちはドイツで言うように「アウフデムHolzweg」)は


活字体と同様の機能を追加するためのrelated questionproposalがあります。 flowtypeよりtypescriptを選択することは、もちろんオプションではありません。

答えて

1

私は思います opaque type LocalizationIdentifierType = string

:あなたがしているフローの opaque type aliases

を探している可能性がありどのようなあなたは、不透明なタイプの別名を作ることができます

これは、ファイル内の文字列として動作しますが、ファイルの外側の名目上の型として動作します。

あなたはLocalizationIdentifierType extends Stringに似た何かをしたいことを言及 - あなたは不透明タイプの別名にサブタイプの制約を追加することによって、これを達成することができます

opaque type LocalizationIdentifierType: string = string

これはLocalizationIdentifierTypeが文字列ではなく、ということを意味すべての文字列はaですLocalizationIdentifierType

+0

本当にはい。私はすでにこれを使用していますが、私はこの質問をしたときに利用できませんでした:) –

1

リテラルタイプはほとんど動作します。残念ながら、これはあなたの他の場合(誤ってプレーンテキストAPIに渡されたローカライズされたテキスト)のために崩壊してしまう

function format(id: "SIGNUP_FORM_TITLE" | "MAIL_FORM_TITLE" | ...): string { 
    ... 
} 

としてあなたは formatの署名を指定することができます。オブジェクトリテラルのタイプは、最も抵抗のJavaScriptのパスのように思える:

type LocalizedString = { 
    +field: "SIGNUP_FORM_TITLE" | "MAIL_FORM_TITLE" 
}; 
type PlainText = string; 

const signupFormTitle: LocalizedString = { field: "SIGNUP_FORM_TITLE" }; 
const mailFormTitle: LocalizedString = { field: "MAIL_FORM_TITLE" }; 

あなたはLocalizedStringのバリエーションを導入する必要がある場合は、オブジェクト内の追加のタグフィールドがうまく動作、例えば:

type LocalizedString = { 
    +variant: "variant1", 
    +field: "SIGNUP_FORM_TITLE" | "MAIL_FORM_TITLE" 
}; 
+0

残念ながら、これは私が考えていたものとはまったく一致しませんでした。私は本当にうれしくて、不透明なタイプは今それを作った☺️ –

関連する問題