Typescript 매개 변수 이름에서 물음표는 무엇입니까?


179
export class Thread {
  id: string;
  lastMessage: Message;
  name: string;
  avatarSrc: string;

  constructor(id?: string,
              name?: string,
              avatarSrc?: string) {
    this.id = id || uuid();
    this.name = name;
    this.avatarSrc = avatarSrc;
  }
}

에서 id?은 무엇 ?을 위해?

답변:


207

6
변수 이름 끝에 $ 기호가 있습니다. 그게 무슨 뜻이야?
— Sunil Garg 2012

12
TypeScript와 관련이 없습니다. RxJ 프로젝트에서 이러한 구문을 보았습니다. 이 문서에서 : "스트림을 참조하는 변수를 식별하는 일반적인 RxJS 규칙"입니다. github.com/redux-observable/redux-observable/blob/master/docs/…
— Fidan Hakaj

3
@SunilGarg $ postfix는 일반적으로 변수가 관찰 가능하다는 것을 의미하는 명명 규칙입니다.
— java-addict301

30

이것은 Optional 타입 의 변수 를 만들기위한 것 입니다. 이 변수를 사용하지 않으면 선언 된 변수에 " undefined "가 표시됩니다.

export interface ISearchResult {  
  title: string;  
  listTitle:string;
  entityName?: string,
  lookupName?:string,
  lookupId?:string  
}

1
"널링 가능"유형을 나타내는 것에 동의하지 않습니다. 선택적이며 널 입력 가능하지 않음을 나타냅니다. 예를 들어, title위의 예제에서 값을 갖는 것은 여전히 ​​유효 null하지만 구현할 것을 주장하는 클래스가 컴파일 타임에 특성 ISearchResult이 누락 된 것은 유효하지 않습니다 entityName.
— Josh Gallagher

8
올바른 이름은 "선택적 매개 변수"라고 생각합니다. 널 입력 가능 유형은입니다 string?. 선택적 nullable을 사용하려면을 수행하십시오 name?: string?.
— user276648

@DvG Josh Gallagher와 user276648의 의견을 고려하여 답변을 개선 하시겠습니까?
— user1460043

@ user1460043 .. 답변을 업데이트했습니다. 알려 주셔서 감사합니다
— DvG

"선택형"이라는 표현은 c ++, scala 또는 python과 같은 언어에서 유래한다고 가정합니다. 일반적인 Optional <T> 유형이있는 경우 실제로, ?변수 이름 뒤에 대신 유형 스펙 을 두는 것이 더 합리적 입니다. 에 아무것도 전달하지 않으면 lookupIdtype이 없습니다 string.
— Marti Nito

13

parameter?: type 속기입니다 parameter: type | undefined


2
정확히. 물음표는 "선택적"을 의미합니다. "parameter : type | undefined = undefined"의 약어입니다.
— mcoolive
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.