Life Developer
인생 개발자
Developer (136)
[typescript]Generic type 응용

interface Person{

    name:string;

    age:number;

}

 

function getProperty<T,K extends keyof T>(obj:T, key:K):T[K]{

    return obj[key];

}

 

function setProperty<T,K extends keyof T>(obj:T, key:K, value:T[K]):void{

    obj[key] = value;

}

 

const person:Person = {

    name:'gibeom',

    age:35,

}

 

console.log(getProperty(person,'name'));

 

console.log(getProperty(person,'age'));



setProperty(person,'name','modified name');

 

console.log(getProperty(person,'name'));

 

console.log(getProperty(person,'age'));

  Comments,     Trackbacks
[typescript]Generic type - 2개이상 타입

class Person<TK>{

    private _name:T;

    private _age:K;

 

    constructor(name:T,age:K){

        this._name=name;

        this._age=age;

    }

}

 

new Person('kim',30); <- 여기서 객체의 타입을 정해버림

 

'Developer' 카테고리의 다른 글

[typescript]Decorator - 기본  (0) 2020.10.02
[typescript]Generic type 응용  (0) 2020.10.02
[typescript]Generic type - 상속  (0) 2020.10.02
[typescript]Generic class  (0) 2020.10.02
[typescript]Generic  (0) 2020.10.02
  Comments,     Trackbacks
[typescript]Generic type - 상속

제한을 둔다

 

class Person<T extends string|number>{

    private _name:T;

 

    constructor(name:T){

        this._name=name;

    }

}

 

new Person('aa');

new Person(22);

 

'Developer' 카테고리의 다른 글

[typescript]Generic type 응용  (0) 2020.10.02
[typescript]Generic type - 2개이상 타입  (0) 2020.10.02
[typescript]Generic class  (0) 2020.10.02
[typescript]Generic  (0) 2020.10.02
[typescript]class - readonly  (0) 2020.10.01
  Comments,     Trackbacks
[typescript]Generic class

class Person<T>{

    private _name:T;

 

    constructor(name:T){

        this._name=name;

    }

}

 

const kim = new Person('gibeom');

const age = new Person(123);

 

console.log(kim);

console.log(age);

'Developer' 카테고리의 다른 글

[typescript]Generic type - 2개이상 타입  (0) 2020.10.02
[typescript]Generic type - 상속  (0) 2020.10.02
[typescript]Generic  (0) 2020.10.02
[typescript]class - readonly  (0) 2020.10.01
[typescript]class - getter와 setter  (0) 2020.10.01
  Comments,     Trackbacks
[typescript]Generic

any 쓰지말고 제네릭 사용하면 좋음.

 

 

function helloString(message:string):string{

    return message;

}

 

function helloNumber(message:number):number{

    return message;

}

 

function hello<T>(message:T):T{

    return message;

}

 

hello("a");

hello(123);

 

 

function anyFn(param:any):any{

    return param;

}

 

String(anyFn("Aa")).substr;

 

any 를 쓰면 타입을 일일이 바꿔서 함수사용

  Comments,     Trackbacks
[typescript]class - readonly

readonly를 사용하면 생성자로 값 세팅가능하고 그외방법으로 값을 넣지 못함.

그리고 public일때도 외부에서 변수 읽기만 가능.

 

 

class Person{

    private readonly _name:string =null;

    public readonly age:number=30;

 

    constructor(name:string){

        this._name=name;

    }

 

    public setName(name:string){

        //this._name=name;

    }

}

 

const p:person = new Person('kim');

console.log(p.age);

//p.age=36;

  Comments,     Trackbacks
[typescript]class - getter와 setter

class Person{

    constructor(private _name:stringprivate _age:number){

 

    }

 

    hello():void {

        console.log(this._name);

    }

 

    getName():string{

        return this._name;

    }

 

    setName(name:string){

        this._name=name;

    }

}

 

const person : Person = new Person('kim',30);

 

console.log(person.getName());

person.setName('aaaa');

console.log(person.getName());

  Comments,     Trackbacks
[typescript]class - 자식 생성자는 super를 꼭 가져야함

class Person{

    constructor(protected _name:stringprotected _age:number){

 

    }

 

    hello():void {

        console.log(this._name);

    }

}

 

const person : Person = new Person('kim',30);

person.hello();



class Child extends Person{

    constructor(){

        super('man',300);

    }

}

 

const child:Child = new Child();

 

child.hello();

'Developer' 카테고리의 다른 글

[typescript]class - readonly  (0) 2020.10.01
[typescript]class - getter와 setter  (0) 2020.10.01
[typescript]class - class안에 생성자의 private 변수  (0) 2020.10.01
[typescript]class - protected  (0) 2020.10.01
[typescript]class - private  (0) 2020.10.01
  Comments,     Trackbacks