当其 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 属性。