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?
中的 ?
是做什么用的?
是将参数标记为可选。
TypeScript 手册 https://www.typescriptlang.org/docs/handbook/2/functions.html#optional-parameters
TypeScript 深入了解 https://basarat.gitbook.io/typescript/type-system/functions#optional-parameters
这是为了制作 Optional 类型的变量。否则,如果未使用此变量,则声明的变量将显示“未定义”。
export interface ISearchResult {
title: string;
listTitle:string;
entityName?: string,
lookupName?:string,
lookupId?:string
}
title
的值为 null
仍然有效,但对于声称实现 ISearchResult
的类在编译时缺少 entityName
属性将是无效的.
string?
。要拥有一个可选的可为空值,您需要执行 name?: string?
。
?
放在类型规范之后而不是变量名之后会更有意义。如果您不向 lookupId
传递任何内容,那么它将没有类型 string
。
参数?:类型是参数的简写:类型|不明确的
那么有什么区别?问号表示“可选”。
更准确地说,parameter?: type
等于 parameter: type | undefined = undefined
undefined
,而是默认为不存在。 Masih 的回答是正确的:parameter?: type
是 parameter: type | undefined
的简写,请注意 = undefined
在 this example 中的行为有何不同。
param?: type
将参数声明为可选,param: type | undefined
不声明。示例:const foo: { a?: string } = {}
有效,但 const foo: { a: string | undefined } = {}
失败。同时,在函数声明中@mcoolive 是对的,arg?: type
等价于 arg: type | undefined = undefined
,比较 stackoverflow.com/questions/37632760/…
参数中的 ?
表示可选参数。 Typescript 编译器不需要填写此参数。更多详细信息请参见下面的代码示例:
// baz: number | undefined means: the second argument baz can be a number or undefined
// = undefined, is default parameter syntax,
// if the parameter is not filled in it will default to undefined
// Although default JS behaviour is to set every non filled in argument to undefined
// we need this default argument so that the typescript compiler
// doesn't require the second argument to be filled in
function fn1 (bar: string, baz: number | undefined = undefined) {
// do stuff
}
// All the above code can be simplified using the ? operator after the parameter
// In other words fn1 and fn2 are equivalent in behaviour
function fn2 (bar: string, baz?: number) {
// do stuff
}
fn2('foo', 3); // works
fn2('foo'); // works
fn2();
// Compile time error: Expected 1-2 arguments, but got 0
// An argument for 'bar' was not provided.
fn1('foo', 3); // works
fn1('foo'); // works
fn1();
// Compile time error: Expected 1-2 arguments, but got 0
// An argument for 'bar' was not provided.