TypeScript λ²μ : νμ¬ νλ μ΄ κ·ΈλΌμ΄λ λ²μ (?)
μνΈ
class GenericGroup<T> {
items: Array<T> = [];
constructor(name: string) {}
}
type CheckboxValues = string;
type CheckboxesGroup = new (name: string) => GenericGroup<CheckboxValues>;
const Checkboxes: CheckboxesGroup = GenericGroup;
const checkboxes = new Checkboxes('checkboxes');
checkboxes.items.map(item => item.toUpperCase());
type RadioValues = string;
type RadiosGroup = typeof GenericGroup<RadioValues>;
const Radios: RadiosGroup = GenericGroup;
const radios = new Radios('radios');
radios.items.map(item => item.toUpperCase());
μμλλ λμ :
typeof GenericGroup<RadioValues>;
λ new (name: string) => GenericGroup<RadioValues>;
μ λμΌν©λλ€.
μ€μ νλ :
typeof GenericGroup<RadioValues>;
μ΄ μ§μλμ§ μκΈ° λλ¬Έμ ꡬ문 μ€λ₯μ
λλ€.
μκ·Ή:
λ΄ μ¬μ© μ¬λ‘μλ νμ¬ λΌμ΄λΈλ¬λ¦¬μ ν΄λμ€λ₯Ό _ νμ₯ _νλ μΌλ° ( GenericGroup
) ν΄λμ€κ° μμ΅λλ€. νμ¬ libμ ν΄λμ€λ μμ±μμμ μ¬λ¬ λ§€κ° λ³μλ₯Ό μ¬μ©ν©λλ€. μ±μμ§ μ λ€λ¦μΌλ‘ ν΄λμ€ λ³μΉμ μ§μ νλ©΄ μ€μ λ‘ μ μ§ κ΄λ¦¬νμ§ μκΈ° λλ¬Έμ λ§€λ² νμ¬ libμ λν λ§€κ° λ³μλ₯Ό μμ±νκ³ μΆμ§ μμ΅λλ€ ( new (name: string) => GenericGroup<CheckboxValues>;
).
(κ΄λ ¨λ μ¬λ¬ λ¬Έμ κ°μλ κ² κ°μ§λ§ μ ννμ΄ λ¬Έμ μ λν λ¬Έμ λ₯Ό μ°Ύμ μ μμ΅λλ€.)
'typeof'μ°μ°μλ μ νμ μμ±μλ₯Ό μ€λͺ
νλ κ²μ΄ μλλΌ κ°μ μ νμ μ€λͺ
νκΈ°μν κ²μ
λλ€. SomeGeneric
interface MyInterface {
name: string;
}
let m: typeof MyInterface; // error "MyInterface only refers to a type, but is being used as a value here."
μ΄μ λν ν΄κ²°μ± μ Angularμ κ°μ μμ±μλ₯Ό μ€λͺ νλ μ λ€λ¦ μ νμ μ μνλ κ²μ λλ€.
// angular/packages/core/src/type.ts
export interface Type<T> extends Function {
new (...args: any[]): T;
}
( angular / packages / core / src / type.ts )μμ
μ¬μ© μ :
type RadioValues = string;
type RadiosGroup = Type<GenericGroup<RadioValues>>;
const Radios: RadiosGroup = GenericGroup;
const radios = new Radios('radios');
radios.items.map(item => item.toUpperCase());
λ―Έλ¬ν μ μ μ λ€λ¦ ν΄λμ€ μμ±μ ν¨μ κ° μ λ€λ¦ μ νμ ν¬ν¨λμ΄ μμ§ μλ€λ κ²μ λλ€. μ ν λ§€κ° λ³μκ° μ μ λ©€λ²μ λ²μμ μμ§ μκΈ° λλ¬Έμ μ μ μμ΅λλ€! λΉμ μ΄ μ΄λ° νμ μ κ°μ§κ³ μλ κ²μ²λΌ "λλ"
interface GenericCtor<T> {
new(x: string): InstanceType<T>;
}
κ·Όλ° μ§μ§ νμ μ μ΄λ κ²
interface GenericCtor {
new<T>(x: string): InstanceType<T>;
}
λ λ€ κ°μ¬ν©λλ€. λλ μ΄κ²μ λ΄ λ¨Έλ¦¬λ₯Ό κ°μ νμκ°μλ€. μ κ²½μ°μλ νμ¬ μμ±μ ( React.Component
)μμ νμ₯νλ―λ‘ μ¬κΈ°μ νΌλλ°±μ μ μ©νλ λ°©λ²μ μμ λ΄μΌν©λλ€. κ°μ¬.
κ°μ₯ μ μ©ν λκΈ
'typeof'μ°μ°μλ μ νμ μμ±μλ₯Ό μ€λͺ νλ κ²μ΄ μλλΌ κ°μ μ νμ μ€λͺ νκΈ°μν κ²μ λλ€. SomeGenericκ°μ΄ μλλΌ κ·Έ μ체μ μ νμ
λλ€. λ€λ₯Έ μΈν°νμ΄μ€ / μ ν (μλμ μ μ λ κ²κ³Ό κ°μ)λ μ΄λ¬ν λ°©μμΌλ‘ μλνμ§ μμ΅λλ€.
μ΄μ λν ν΄κ²°μ± μ Angularμ κ°μ μμ±μλ₯Ό μ€λͺ νλ μ λ€λ¦ μ νμ μ μνλ κ²μ λλ€.
( angular / packages / core / src / type.ts )μμ
μ¬μ© μ :