当其 GraphQL arg 指示可空 true 时,TypeScript arg 旁边的问号是什么?
What is the question mark for next to TypeScript arg when its GraphQL arg indicates nullable true?
// image.entity.ts
import { Field, ObjectType } from '@nestjs/graphql';
import {
Column,
DeleteDateColumn,
Entity,
PrimaryGeneratedColumn,
} from 'typeorm';
@ObjectType()
@Entity()
export class ImageEntity {
@PrimaryGeneratedColumn('uuid')
@Field(() => String)
id: string;
@Column({ default: false })
@Field(() => Boolean, { defaultValue: false })
isThumbnail: boolean;
//isThumbnail?: boolean; // it worked without question mark
}
//image.resolver.ts
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { ImageEntity } from './entities/image.entity';
import { ImageService } from './image.service';
@Resolver()
export class ImageResolver {
constructor(private readonly imageService: ImageService) {}
@Mutation(() => ImageEntity)
async createImage(
@Args('imageUrl') imageUrl: string,
//=============this part=================
@Args('isThumbnail', { nullable: true }) isThumbnail?: boolean, // <--- that question mark I'm takin bout
// @Args('isThumbnail', { nullable: true }) isThumbnail: boolean, // it work fine without the question mark
// what this thing for?
//========================================
) {
return await this.imageService.create({ isThumbnail, imageUrl });
}
}
与代码一样,它与 TypeORM 和 GraphQL 相关联。并且一些参数(也是相关列)可以为空。
我知道 {nullable : true} 使 GraphQL 和 TypeORM 的参数和列在没有问号的情况下都可行。它工作正常,但在 nestjs 文档上,问号就在
下方
@Field(()=>Some Type, {nullable: true}.
我的问题是问号只是表示它作为打字稿类型是可选的吗?
是的,这意味着它是可选的,参见https://www.geeksforgeeks.org/why-use-question-mark-in-typescript-variable/
可以理解,它似乎是多余的,之所以这样,一方面,GraphQL 必须知道它是 nullable
,另一方面,Typescript 强制你定义你的类型.
GraphQL 也可以被“普通”Javascript 使用,这非常 loose-typed,因为 use-case 项目的可选性质是唯一的地方指定的是 nullable
属性。
// image.entity.ts
import { Field, ObjectType } from '@nestjs/graphql';
import {
Column,
DeleteDateColumn,
Entity,
PrimaryGeneratedColumn,
} from 'typeorm';
@ObjectType()
@Entity()
export class ImageEntity {
@PrimaryGeneratedColumn('uuid')
@Field(() => String)
id: string;
@Column({ default: false })
@Field(() => Boolean, { defaultValue: false })
isThumbnail: boolean;
//isThumbnail?: boolean; // it worked without question mark
}
//image.resolver.ts
import { Args, Mutation, Query, Resolver } from '@nestjs/graphql';
import { ImageEntity } from './entities/image.entity';
import { ImageService } from './image.service';
@Resolver()
export class ImageResolver {
constructor(private readonly imageService: ImageService) {}
@Mutation(() => ImageEntity)
async createImage(
@Args('imageUrl') imageUrl: string,
//=============this part=================
@Args('isThumbnail', { nullable: true }) isThumbnail?: boolean, // <--- that question mark I'm takin bout
// @Args('isThumbnail', { nullable: true }) isThumbnail: boolean, // it work fine without the question mark
// what this thing for?
//========================================
) {
return await this.imageService.create({ isThumbnail, imageUrl });
}
}
与代码一样,它与 TypeORM 和 GraphQL 相关联。并且一些参数(也是相关列)可以为空。
我知道 {nullable : true} 使 GraphQL 和 TypeORM 的参数和列在没有问号的情况下都可行。它工作正常,但在 nestjs 文档上,问号就在
下方@Field(()=>Some Type, {nullable: true}.
我的问题是问号只是表示它作为打字稿类型是可选的吗?
是的,这意味着它是可选的,参见https://www.geeksforgeeks.org/why-use-question-mark-in-typescript-variable/
可以理解,它似乎是多余的,之所以这样,一方面,GraphQL 必须知道它是 nullable
,另一方面,Typescript 强制你定义你的类型.
GraphQL 也可以被“普通”Javascript 使用,这非常 loose-typed,因为 use-case 项目的可选性质是唯一的地方指定的是 nullable
属性。