ORILLYプログラミング「TypeScript」という本を手にとっています

【TypeScript】 Enumと初期化時のanyの癖を知る(Know Enum and the habit of any at initialization)

実験TypeScript-1 Enumと初期化時のanyの癖を知る(Know Enum and the habit of any at initialization)

ORILLYプログラミング「TypeScript」という本を手にとっています
ORILLYプログラミング「TypeScript」

実際のコード

ここでお知らせすること。

enumの特徴

空配列を渡すとany[]になる話


/////////////////////////////////////////////////////////////////
enumの特徴
// const enumはJavaScriptを生成しない
// const enumはState[1000]などを許可しない constを付けないと許可する...
// 例えば...

enum B {
    Open,
    Close 
}
B[1000] //OK。Openは0, Closeは1が入っているはずこんな値ないのに...

const enum C {
    Open,
    Close
}
C[1000] //そんな値がないからError

/////////////////////////////////////////////////////////////////

enumはまーじする

// 初期化すると...

enum AA {
    Open = "1",
    Colse = "2"
}
enum AA {
    Non // 0
}
/// これも

enum AAA {
    Open = 0,
    Colse = 1
}
enum AAA {    Non // 0
}
//////////////////////////////////////////////////////////////////

//enum BBをlet(ミュータブルな型), const(イミュータブルな型)に代入した時の違い。type wideningされる

enum BB {
    Open,
    Close
}
let closeA = BB.Close // BB。letはリテラル値ではなくそのリテラルが所属するベース値になる
const closeB = BB.Close // BB.Close // constは代入されないことが保証されるのでリテラル型になる

let closeC: BB.Close = 1 // 明示的なアノテーションでtype wideningされるのを防ぐ>///////////////////////////////////////////////////////////////// 

これは anyが入る

let h = null;// any
h = 3 // any
h = "b" // any

/// nullまたはundefinedに初期化された変数はanyに拡大される
// そのスコープを離れると明確な方をそれに割り当てる

function x() {
    let a = null
    a = 3 // any
    a = "b" // any
    return a
}
x() // string

/////////////////////////////////////////////////////////////////

enumは存在しない値でもokになる...//例えば...

const enum State {
    Open, 
    Close
}

function f(e: State) {
    return e
}

const a = f(State.Close)

const b = f(100) // まじか...

// これを数値を許可しないようにするには 値を明示的にする

const enum StateA {
Open = "Open",
Close = "Close"
}

function fA(e: StateA) {
    return e
}
fA(StateA.Close)fA(100); // error

///////////////////////////////////////////////////////////////

let c = [] // 初期化時、空配列を渡すとany[]になる
//その後
c.push(3)
c; // number[]に動的に推論される
c.push("aaa")
c; //"aaa"が入ったので変わる この時点で(string | number)[]
///////////////////////////////////////////////////////////////

「武骨日記の」プライバシーポリシーに関して
プライバシーポリシー
個人情報取り扱いに関して

サイトTOP
私は何者か
29歳よしもと芸人がWebデザイナー未経験で学校に通い5年後フリーランスのフロントエンドエンジニアになるためにやった9つのこと
フロント記事
フロントエンドエンジニア
フロントエンド記事(タグ)
TypeScript
TypeScript練習問題集
【TypeScript】TypeSript中級者になる為に知っておくと良い108個のこと
JavaScript練習問題
styled-componentsの使い方
SCSS問題集
GraphQL「Apollo x Relay-Style-Cursor-Pagination(リレースタイルカーソルページネーション)」
recomposeと仲良くなりたい
機動戦士FlowType
初めてReactNativeWebを触ってみて
Ramda.jsシグネチャの読み方
環境変数の話
いちごタルトの作り方
フロントエンドエンジニア豚汁の作り方


「武骨日記の」プライバシーポリシーに関して
プライバシーポリシー

株式会社TerraceTechについて
最近起業しました。
株式会社TerraceTech

SNS
インド旅 instagram
適当な日常写真 instagram
シュールさーん instagram
シュールさーん LINEスタンプ
もりたけんじTwitter
ネタ帳Twitter
note

FaceBook -kennji.morita-

わたしが結成しているWebチームではWeb未経験者、フリーランスの方へのお仕事を紹介しています。
また個人レッスンしてほしい生徒も募集中です。
もしご興味ある方はチャットからご連絡ください。

※業務連絡やお久しぶり連絡もチャットからお願いします。