μ§μ λ λ¬Έμμ΄λ§ μ¬μ©ν μ μλ λ¬Έμμ΄ λ³μλ₯Ό μ μΈν λ, λ¬Έμμ΄ μ‘°ν© νμ String Union Typeμ μ¬μ©ν©λλ€.
type Status = 'Todo' | 'InProgress' | 'Done';
const status: Status = 'Todo'; // βοΈ OK
const status2: Status = 'None'; // β Error
μ΄ λ, λ¬Έμμ΄ μ‘°ν© νμμ΄ νμ©νλ λ¬Έμμ΄μ μΆλ ₯νλ €κ³ νλ©΄, μ¬μ΄ λ°©λ²μ΄ μκ°λμ§ μμ΅λλ€.
μλ μ½λλ μμλ‘ μμ±ν μ½λμ΄κ³ , λμνμ§ μμ΅λλ€.
const some: Status // ??
<select>
{typeof(Status).map(status => <option value={status}>{status}</option>)} // ??
</select>
μ΄λ₯Ό μν΄ μλμ κ°μ΄ νμ μ μλ₯Ό λ³κ²½ν μ μμ΅λλ€.
const statusTypes = ['Todo', 'InProgress', 'Done'] as const;
type Status = typeof statusTypes[number];
const status: Status = 'Todo'; // βοΈ OK
const status2: Status = 'None'; // β Error
첫λ²μ§Έ, λλ²μ§Έ Status
νμ μ μλ λμΌνκ² λμν©λλ€.
μ΄μ λ¬Έμμ΄ μ‘°ν© νμμ΄ νμ©νλ λ¬Έμμ΄μ μ½κ² μΆλ ₯ν μ μμ΅λλ€.
<select>
{statusTypes.map(status => <option value={status}>{status}</option>)} // π
</select>