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?什么?用?

Answers:


207

6
我在变量名的末尾看到了$符号。那是什么意思?
Sunil Garg's

12
它与TypeScript不相关。我已经在RxJs项目中看到过这样的语法。在文档中:这是“识别引用流的变量的通用RxJS约定”。github.com/redux-observable/redux-observable/blob/master/docs/...
Fidan的Hakaj

3
@SunilGarg $后缀通常是一个命名约定,表示变量是可观察的。
java-addict301 '19

30

这是为了使变量成为Optional类型。否则,如果不使用此变量,则声明的变量将显示“ undefined ”。

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

1
我不同意它表示“空”类型。它表示可选的,不能为空。例如,title在上面的示例中,值为仍然是有效的,null但是对于声称要实现的类在编译时ISearchResult缺少entityName属性将是无效的。
乔什·加拉格尔

8
我认为正确的名称是“可选参数”。可空类型为string?。要具有可选的nullable,您可以这样做name?: string?
user276648

@DvG您是否可以考虑Josh Gallagher和user276648的评论来改善答案?
user1460043 '18

@ user1460043 ..我已经更新了答案。感谢您通知我
DvG

我假设措词“可选类型”源自c ++,scala或python之类的语言。您具有通用的Optional <T>类型。实际上,将?type 放在类型说明之后而不是在变量名之后会更有意义。如果您不传递任何东西lookupId,它将没有类型string
玛蒂·尼托

14

parameter?: type 是的简写 parameter: type | undefined


2
不完全是。问号表示“可选”。所以这是一个速记“参数:型号|未定义=未定义” ..
mcoolive
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.