2016-12-06 21 views
0

:それが宣言された後再宣言文字列リテラルタイプ

type Easing = "ease-in" | "ease-out" | "ease-in-out"; 

私は型に多くのリテラルを追加することはできますか?すなわち、上記の宣言に触れることなく(私の所有でないファイルにある可能性があるため)動作しません

https://www.typescriptlang.org/docs/handbook/advanced-types.html


もの:

type Easing = "ease-in" | "ease-out" | "ease-in-out"; 
type Easing = Easing | 'uneasy' 

または

type Easing = "ease-in" | "ease-out" | "ease-in-out"; 
type Easing |= 'uneasy' 

または

type Easing = "ease-in" | "ease-out" | "ease-in-out"; 
type Easing = "ease-in" | "ease-out" | "ease-in-out" | 'uneasy'; 

これらのすべてがエラー "duplicate identifier 'Easing'のために失敗します。"


許可されていない場合はどうすればよいですか?そしてなぜなのですか?enumsと同様のことをすることができましたか?彼らはどう違うのか分かりません。

enum Easing { 
    EaseIn, 
    EaseOut, 
    EaseInOut 
} 

// works just fine 
enum Easing { 
    Uneasy = 3 
} 
+0

おそらく、根本的な問題を解決しようとしていることを示すべきでしょう。あなたが求めている特定のことは、問題の解決策ではありませんが、多くの原因になります! –

+0

「不安」は、私がやっていることに対して非常にうまくいくかもしれないが、「イージング」の価値がないと考えられるという問題に対する解決策です。 TSはそれを書いた人よりもコードをよく知っているようなふりをしてはいけません。 –

+0

IMOの文字列型は実際にはタイプミスを捉えるのにうってつけですが、意地悪なことに、「大丈夫、私のやっていることはわかっていますので、この値を使用してください」 –

答えて

0

あなたはそれが問題を作成することを行っている可能性がある場合、次の点を考慮してください

type Easing = "ease-in" | "ease-out" | "ease-in-out"; 
function addClassName(el: HTMLElement, a: Easing) { 
    el.className += " " + a; 
} 

だから、異なるファイルの一部であった、と誰が今までにわずか3特定を処理するために期待していることを書きましたEasingによって定義される値。
これを変更すると、そのコードが破損する可能性があります。あなたがあなたのファイルに何ができるか

は次のとおりです。

type Easing2 = Easing | "uneasy"; 

そして、代わりにEasingのものを使用します。

+0

この例では、コードは' Easing'値だけを期待していますが、他の値に対しては保護されていません。 'addClassName(el、 '不安'はイージングと同じ文字列); 見た目、TSエラーはありません。 定義されていない値を渡すことは既に可能です。私の変更がそれらに対して守らないコードを破ることに同意しないのです。 –

+0

(私が 'as '演算子のしていることを誤解して、私の前のコメントが間違っている場合は私に許してください) –

+0

コンパイラをバイパスすることはできますが、'すべてのものとして 'を使うこともできます。コンパイラは他の値を渡すことはできません。あなたのコードが聞こえない場合、コードが壊れる可能性があります。 –

関連する問題