类型定义中的问号有什么作用?
What does the question mark in type definitions do?
我正在查看 Nest.js 类型定义,因为 Typescript 在我的参数中要求特定类型。
insert<TResult2 = number[]>(
data: TRecord extends CompositeTableType<unknown>
? ResolveTableType<TRecord, 'insert'> | ReadonlyArray<ResolveTableType<TRecord, 'insert'>>
: DbRecordArr<TRecord> | ReadonlyArray<DbRecordArr<TRecord>>
): QueryBuilder<TRecord, TResult2>;
在这个函数中,?
在CompositeTableType
类型之后做了什么。我知道 |
栏指定需要使用 ResolveTableType
或 ReadonlyArray
,但不知道如何与 ?
联系起来。
我制作的有问题的函数
async create(data: TTableAttributes extends any) // Put any because wasn't sure what to put after "extends CompositeTableType<TTableAttributes>"
{
await this.knex.insert(data).returning("*").then((data) => { console.log(data); return data; });
}
这些称为条件类型。它只是一个常规的条件运算符(三元运算符?:)
https://www.typescriptlang.org/docs/handbook/2/conditional-types.html
如果 TRecord 继承自 CompositeTableType,则“数据”参数的类型将为 ResolveTableType | ReadonlyArray> 。否则,它将是类型 DbRecordArr | ReadonlyArray
我正在查看 Nest.js 类型定义,因为 Typescript 在我的参数中要求特定类型。
insert<TResult2 = number[]>(
data: TRecord extends CompositeTableType<unknown>
? ResolveTableType<TRecord, 'insert'> | ReadonlyArray<ResolveTableType<TRecord, 'insert'>>
: DbRecordArr<TRecord> | ReadonlyArray<DbRecordArr<TRecord>>
): QueryBuilder<TRecord, TResult2>;
在这个函数中,?
在CompositeTableType
类型之后做了什么。我知道 |
栏指定需要使用 ResolveTableType
或 ReadonlyArray
,但不知道如何与 ?
联系起来。
我制作的有问题的函数
async create(data: TTableAttributes extends any) // Put any because wasn't sure what to put after "extends CompositeTableType<TTableAttributes>"
{
await this.knex.insert(data).returning("*").then((data) => { console.log(data); return data; });
}
这些称为条件类型。它只是一个常规的条件运算符(三元运算符?:) https://www.typescriptlang.org/docs/handbook/2/conditional-types.html
如果 TRecord 继承自 CompositeTableType,则“数据”参数的类型将为 ResolveTableType