Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Kiota TypeScript Generates Fields and Methods with Incorrect Casing #4479

Closed
zZHorizonZz opened this issue Apr 11, 2024 · 3 comments · Fixed by #4521
Closed

Kiota TypeScript Generates Fields and Methods with Incorrect Casing #4479

zZHorizonZz opened this issue Apr 11, 2024 · 3 comments · Fixed by #4521
Assignees
Labels
type:bug A broken experience TypeScript Pull requests that update Javascript code
Milestone

Comments

@zZHorizonZz
Copy link

The kiota typescript generator is producing field and method names that begin with lowercase letters, even when the corresponding definitions in the OpenAPI specification use uppercase (capital) letters. This casing discrepancy causes parsing errors because parsing seems case-sensitive, and the generated code cannot correctly match the expected data structure.

Steps to Reproduce:

  1. Define an OpenAPI Specification: Create an OpenAPI (Swagger) specification with entities containing properties and/or methods starting with capital letters. For example:

    components:
      schemas:
        MyObject:
          type: object
          properties:
            ImportantValue:
              type: string
            RequestMethod:
              type: string 
  2. Generate TypeScript Code: Use the kiota generator to create corresponding typeScript models and/or client code from the specification.

  3. Inspect Generated Code: Examine the generated TypeScript code. Observe that the field ImportantValue and method RequestMethod might be incorrectly generated as importantValue and requestMethod, respectively.

  4. Attempt Data Parsing: Try to parse a JSON response conforming to the original OpenAPI specification using the generated TypeScript models. Parsing errors are likely to occur.

Expected Behavior:

The kiota typescript generator should preserve the casing of fields and methods as defined in the OpenAPI specification. In the example above, the generated code should include ImportantValue and RequestMethod with their correct capitalization.

Potential Solutions:

  • Modify Name Casing Strategy: Update the Kiota generator's naming conventions to respect the original casing from the OpenAPI specification.
  • Introduce Configuration Option: Provide an option in the generator to allow users to control whether to preserve casing or enforce a specific casing standard (e.g., camelCase).
@baywet
Copy link
Member

baywet commented Apr 16, 2024

Hi @zZHorizonZz
Thanks for using kiota and for reporting this.
Can you share the following things please:

  • generated interface for the model
  • generated parsing method for the model

Effectively the casing should be correct in the parsing method as you can see here

And the interface follows language naming conventions as you can see here

@baywet baywet added question TypeScript Pull requests that update Javascript code labels Apr 16, 2024
@zZHorizonZz
Copy link
Author

zZHorizonZz commented Apr 17, 2024

Thank you for the response.

Here's an OpenAPI definition:

"WebDataShare.Services.TSK.TaskModel": {
      "type": "object",
      "properties": {
        "Number": {
          "type": "string"
        },
        "State": {
          "format": "int32",
          "type": "integer"
        },
        "StateDisp": {
          "type": "string"
        },
        "Term": {
          "format": "date-time",
          "type": "string"
        },
        "Type": {
          "format": "int32",
          "type": "integer"
        },
        "TypeDisp": {
          "type": "string"
        },
        "Priority": {
          "format": "int32",
          "type": "integer"
        },
        "Topic": {
          "type": "string"
        },
        "Progress": {
          "format": "int32",
          "type": "integer"
        },
        "Source": {
          "type": "string"
        },
        "KindCode": {
          "type": "string"
        },
        "KindName": {
          "type": "string"
        },
        "Publisher": {
          "type": "string"
        },
        "PublisherName": {
          "type": "string"
        },
        "PublishDate": {
          "format": "date-time",
          "type": "string"
        },
        "Description": {
          "type": "string"
        },
        "ReadStatus": {
          "format": "int32",
          "type": "integer"
        },
        "ReadStatusDisp": {
          "type": "string"
        },
        "Manager": {
          "type": "string"
        },
        "ManagerName": {
          "type": "string"
        },
        "Version": {
          "format": "int32",
          "type": "integer"
        },
        "FreeString1": {
          "type": "string"
        },
        "FreeString2": {
          "type": "string"
        },
        "FreeString3": {
          "type": "string"
        },
        "FreeInt1": {
          "format": "int32",
          "type": "integer"
        },
        "FreeInt2": {
          "format": "int32",
          "type": "integer"
        },
        "FreeDouble1": {
          "format": "double",
          "type": "number"
        },
        "FreeDate1": {
          "format": "date-time",
          "type": "string"
        },
        "FreeDate2": {
          "format": "date-time",
          "type": "string"
        },
        "PartNumber": {
          "type": "string"
        },
        "PartChange": {
          "type": "string"
        },
        "PartName": {
          "type": "string"
        },
        "ContactCode": {
          "type": "string"
        },
        "ContactName": {
          "type": "string"
        },
        "Team": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/WebDataShare.Services.TSK.TeamModel"
          }
        },
        "Solving": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/WebDataShare.Services.TSK.SolvingModel"
          }
        },
        "Links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "HeadKey": {
          "type": "string"
        },
        "HeadBodyKey": {
          "type": "string"
        },
        "BodyKey": {
          "type": "string"
        },
        "CoreKey": {
          "type": "string"
        },
        "TermKey": {
          "type": "string"
        },
        "MemberKey": {
          "type": "string"
        },
        "MemberBodyKey": {
          "type": "string"
        }
      }
    },

The model's index file is here. Also, I need to note that the names of folders containing this file always begin with a lowercase character as well even though the path in the specification starts with uppercase.

/* tslint:disable */
/* eslint-disable */
// Generated by Microsoft Kiota
import { type AdditionalDataHolder, type Parsable, type ParseNode, type SerializationWriter } from '@microsoft/kiota-abstractions';

export interface ActionDataModel extends AdditionalDataHolder, Parsable {
    /**
     * The ActualBodyKey property
     */
    actualBodyKey?: string;
    /**
     * The ActualCoreKey property
     */
    actualCoreKey?: string;
    /**
     * The ActualElement property
     */
    actualElement?: ActionDataModel_ActualElement;
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The Description property
     */
    description?: string;
    /**
     * The ProgressAdd property
     */
    progressAdd?: number;
    /**
     * The ProgressTotal property
     */
    progressTotal?: number;
    /**
     * The RealTimeAdd property
     */
    realTimeAdd?: number;
    /**
     * The RealTimeTotal property
     */
    realTimeTotal?: number;
    /**
     * The Time property
     */
    time?: Date;
    /**
     * The User property
     */
    user?: string;
}
export type ActionDataModel_ActualElement = (typeof ActionDataModel_ActualElementObject)[keyof typeof ActionDataModel_ActualElementObject];
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {ActionDataModel}
 */
export function createActionDataModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoActionDataModel;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {SolvingModel}
 */
export function createSolvingModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoSolvingModel;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {TaskModel_Links}
 */
export function createTaskModel_LinksFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoTaskModel_Links;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {TaskModel}
 */
export function createTaskModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoTaskModel;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {TeamModel}
 */
export function createTeamModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoTeamModel;
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoActionDataModel(actionDataModel: Partial<ActionDataModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "actualBodyKey": n => { actionDataModel.actualBodyKey = n.getStringValue(); },
        "actualCoreKey": n => { actionDataModel.actualCoreKey = n.getStringValue(); },
        "actualElement": n => { actionDataModel.actualElement = n.getEnumValue<ActionDataModel_ActualElement>(ActionDataModel_ActualElementObject); },
        "description": n => { actionDataModel.description = n.getStringValue(); },
        "progressAdd": n => { actionDataModel.progressAdd = n.getNumberValue(); },
        "progressTotal": n => { actionDataModel.progressTotal = n.getNumberValue(); },
        "realTimeAdd": n => { actionDataModel.realTimeAdd = n.getNumberValue(); },
        "realTimeTotal": n => { actionDataModel.realTimeTotal = n.getNumberValue(); },
        "time": n => { actionDataModel.time = n.getDateValue(); },
        "user": n => { actionDataModel.user = n.getStringValue(); },
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoSolvingModel(solvingModel: Partial<SolvingModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "creDate": n => { solvingModel.creDate = n.getDateValue(); },
        "creUser": n => { solvingModel.creUser = n.getStringValue(); },
        "creUserName": n => { solvingModel.creUserName = n.getStringValue(); },
        "description": n => { solvingModel.description = n.getStringValue(); },
        "headManager": n => { solvingModel.headManager = n.getNumberValue(); },
        "member": n => { solvingModel.member = n.getStringValue(); },
        "memberName": n => { solvingModel.memberName = n.getStringValue(); },
        "modDate": n => { solvingModel.modDate = n.getDateValue(); },
        "modUser": n => { solvingModel.modUser = n.getStringValue(); },
        "modUserName": n => { solvingModel.modUserName = n.getStringValue(); },
        "newTerm": n => { solvingModel.newTerm = n.getDateValue(); },
        "term": n => { solvingModel.term = n.getDateValue(); },
        "type": n => { solvingModel.type = n.getNumberValue(); },
        "typeDisp": n => { solvingModel.typeDisp = n.getStringValue(); },
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoTaskModel(taskModel: Partial<TaskModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "bodyKey": n => { taskModel.bodyKey = n.getStringValue(); },
        "contactCode": n => { taskModel.contactCode = n.getStringValue(); },
        "contactName": n => { taskModel.contactName = n.getStringValue(); },
        "coreKey": n => { taskModel.coreKey = n.getStringValue(); },
        "description": n => { taskModel.description = n.getStringValue(); },
        "freeDate1": n => { taskModel.freeDate1 = n.getDateValue(); },
        "freeDate2": n => { taskModel.freeDate2 = n.getDateValue(); },
        "freeDouble1": n => { taskModel.freeDouble1 = n.getNumberValue(); },
        "freeInt1": n => { taskModel.freeInt1 = n.getNumberValue(); },
        "freeInt2": n => { taskModel.freeInt2 = n.getNumberValue(); },
        "freeString1": n => { taskModel.freeString1 = n.getStringValue(); },
        "freeString2": n => { taskModel.freeString2 = n.getStringValue(); },
        "freeString3": n => { taskModel.freeString3 = n.getStringValue(); },
        "headBodyKey": n => { taskModel.headBodyKey = n.getStringValue(); },
        "headKey": n => { taskModel.headKey = n.getStringValue(); },
        "kindCode": n => { taskModel.kindCode = n.getStringValue(); },
        "kindName": n => { taskModel.kindName = n.getStringValue(); },
        "links": n => { taskModel.links = n.getObjectValue<TaskModel_Links>(createTaskModel_LinksFromDiscriminatorValue); },
        "manager": n => { taskModel.manager = n.getStringValue(); },
        "managerName": n => { taskModel.managerName = n.getStringValue(); },
        "memberBodyKey": n => { taskModel.memberBodyKey = n.getStringValue(); },
        "memberKey": n => { taskModel.memberKey = n.getStringValue(); },
        "number": n => { taskModel.number = n.getStringValue(); },
        "partChange": n => { taskModel.partChange = n.getStringValue(); },
        "partName": n => { taskModel.partName = n.getStringValue(); },
        "partNumber": n => { taskModel.partNumber = n.getStringValue(); },
        "priority": n => { taskModel.priority = n.getNumberValue(); },
        "progress": n => { taskModel.progress = n.getNumberValue(); },
        "publishDate": n => { taskModel.publishDate = n.getDateValue(); },
        "publisher": n => { taskModel.publisher = n.getStringValue(); },
        "publisherName": n => { taskModel.publisherName = n.getStringValue(); },
        "readStatus": n => { taskModel.readStatus = n.getNumberValue(); },
        "readStatusDisp": n => { taskModel.readStatusDisp = n.getStringValue(); },
        "solving": n => { taskModel.solving = n.getCollectionOfObjectValues<SolvingModel>(createSolvingModelFromDiscriminatorValue); },
        "source": n => { taskModel.source = n.getStringValue(); },
        "state": n => { taskModel.state = n.getNumberValue(); },
        "stateDisp": n => { taskModel.stateDisp = n.getStringValue(); },
        "team": n => { taskModel.team = n.getCollectionOfObjectValues<TeamModel>(createTeamModelFromDiscriminatorValue); },
        "term": n => { taskModel.term = n.getDateValue(); },
        "termKey": n => { taskModel.termKey = n.getStringValue(); },
        "topic": n => { taskModel.topic = n.getStringValue(); },
        "type": n => { taskModel.type = n.getNumberValue(); },
        "typeDisp": n => { taskModel.typeDisp = n.getStringValue(); },
        "version": n => { taskModel.version = n.getNumberValue(); },
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoTaskModel_Links(taskModel_Links: Partial<TaskModel_Links> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoTeamModel(teamModel: Partial<TeamModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "bodyKey": n => { teamModel.bodyKey = n.getStringValue(); },
        "bodyManager": n => { teamModel.bodyManager = n.getNumberValue(); },
        "coreKey": n => { teamModel.coreKey = n.getStringValue(); },
        "headManager": n => { teamModel.headManager = n.getNumberValue(); },
        "level": n => { teamModel.level = n.getNumberValue(); },
        "member": n => { teamModel.member = n.getStringValue(); },
        "memberKey": n => { teamModel.memberKey = n.getStringValue(); },
        "memberKind": n => { teamModel.memberKind = n.getNumberValue(); },
        "memberName": n => { teamModel.memberName = n.getStringValue(); },
        "readStatus": n => { teamModel.readStatus = n.getNumberValue(); },
        "readStatusDisp": n => { teamModel.readStatusDisp = n.getStringValue(); },
    }
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeActionDataModel(writer: SerializationWriter, actionDataModel: Partial<ActionDataModel> | undefined = {}) : void {
    writer.writeStringValue("ActualBodyKey", actionDataModel.actualBodyKey);
    writer.writeStringValue("ActualCoreKey", actionDataModel.actualCoreKey);
    writer.writeEnumValue<ActionDataModel_ActualElement>("ActualElement", actionDataModel.actualElement);
    writer.writeStringValue("Description", actionDataModel.description);
    writer.writeNumberValue("ProgressAdd", actionDataModel.progressAdd);
    writer.writeNumberValue("ProgressTotal", actionDataModel.progressTotal);
    writer.writeNumberValue("RealTimeAdd", actionDataModel.realTimeAdd);
    writer.writeNumberValue("RealTimeTotal", actionDataModel.realTimeTotal);
    writer.writeDateValue("Time", actionDataModel.time);
    writer.writeStringValue("User", actionDataModel.user);
    writer.writeAdditionalData(actionDataModel.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeSolvingModel(writer: SerializationWriter, solvingModel: Partial<SolvingModel> | undefined = {}) : void {
    writer.writeDateValue("CreDate", solvingModel.creDate);
    writer.writeStringValue("CreUser", solvingModel.creUser);
    writer.writeStringValue("CreUserName", solvingModel.creUserName);
    writer.writeStringValue("Description", solvingModel.description);
    writer.writeNumberValue("HeadManager", solvingModel.headManager);
    writer.writeStringValue("Member", solvingModel.member);
    writer.writeStringValue("MemberName", solvingModel.memberName);
    writer.writeDateValue("ModDate", solvingModel.modDate);
    writer.writeStringValue("ModUser", solvingModel.modUser);
    writer.writeStringValue("ModUserName", solvingModel.modUserName);
    writer.writeDateValue("NewTerm", solvingModel.newTerm);
    writer.writeDateValue("Term", solvingModel.term);
    writer.writeNumberValue("Type", solvingModel.type);
    writer.writeStringValue("TypeDisp", solvingModel.typeDisp);
    writer.writeAdditionalData(solvingModel.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeTaskModel(writer: SerializationWriter, taskModel: Partial<TaskModel> | undefined = {}) : void {
    writer.writeStringValue("BodyKey", taskModel.bodyKey);
    writer.writeStringValue("ContactCode", taskModel.contactCode);
    writer.writeStringValue("ContactName", taskModel.contactName);
    writer.writeStringValue("CoreKey", taskModel.coreKey);
    writer.writeStringValue("Description", taskModel.description);
    writer.writeDateValue("FreeDate1", taskModel.freeDate1);
    writer.writeDateValue("FreeDate2", taskModel.freeDate2);
    writer.writeNumberValue("FreeDouble1", taskModel.freeDouble1);
    writer.writeNumberValue("FreeInt1", taskModel.freeInt1);
    writer.writeNumberValue("FreeInt2", taskModel.freeInt2);
    writer.writeStringValue("FreeString1", taskModel.freeString1);
    writer.writeStringValue("FreeString2", taskModel.freeString2);
    writer.writeStringValue("FreeString3", taskModel.freeString3);
    writer.writeStringValue("HeadBodyKey", taskModel.headBodyKey);
    writer.writeStringValue("HeadKey", taskModel.headKey);
    writer.writeStringValue("KindCode", taskModel.kindCode);
    writer.writeStringValue("KindName", taskModel.kindName);
    writer.writeObjectValue<TaskModel_Links>("Links", taskModel.links, serializeTaskModel_Links);
    writer.writeStringValue("Manager", taskModel.manager);
    writer.writeStringValue("ManagerName", taskModel.managerName);
    writer.writeStringValue("MemberBodyKey", taskModel.memberBodyKey);
    writer.writeStringValue("MemberKey", taskModel.memberKey);
    writer.writeStringValue("Number", taskModel.number);
    writer.writeStringValue("PartChange", taskModel.partChange);
    writer.writeStringValue("PartName", taskModel.partName);
    writer.writeStringValue("PartNumber", taskModel.partNumber);
    writer.writeNumberValue("Priority", taskModel.priority);
    writer.writeNumberValue("Progress", taskModel.progress);
    writer.writeDateValue("PublishDate", taskModel.publishDate);
    writer.writeStringValue("Publisher", taskModel.publisher);
    writer.writeStringValue("PublisherName", taskModel.publisherName);
    writer.writeNumberValue("ReadStatus", taskModel.readStatus);
    writer.writeStringValue("ReadStatusDisp", taskModel.readStatusDisp);
    writer.writeCollectionOfObjectValues<SolvingModel>("Solving", taskModel.solving, serializeSolvingModel);
    writer.writeStringValue("Source", taskModel.source);
    writer.writeNumberValue("State", taskModel.state);
    writer.writeStringValue("StateDisp", taskModel.stateDisp);
    writer.writeCollectionOfObjectValues<TeamModel>("Team", taskModel.team, serializeTeamModel);
    writer.writeDateValue("Term", taskModel.term);
    writer.writeStringValue("TermKey", taskModel.termKey);
    writer.writeStringValue("Topic", taskModel.topic);
    writer.writeNumberValue("Type", taskModel.type);
    writer.writeStringValue("TypeDisp", taskModel.typeDisp);
    writer.writeNumberValue("Version", taskModel.version);
    writer.writeAdditionalData(taskModel.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeTaskModel_Links(writer: SerializationWriter, taskModel_Links: Partial<TaskModel_Links> | undefined = {}) : void {
    writer.writeAdditionalData(taskModel_Links.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeTeamModel(writer: SerializationWriter, teamModel: Partial<TeamModel> | undefined = {}) : void {
    writer.writeStringValue("BodyKey", teamModel.bodyKey);
    writer.writeNumberValue("BodyManager", teamModel.bodyManager);
    writer.writeStringValue("CoreKey", teamModel.coreKey);
    writer.writeNumberValue("HeadManager", teamModel.headManager);
    writer.writeNumberValue("Level", teamModel.level);
    writer.writeStringValue("Member", teamModel.member);
    writer.writeStringValue("MemberKey", teamModel.memberKey);
    writer.writeNumberValue("MemberKind", teamModel.memberKind);
    writer.writeStringValue("MemberName", teamModel.memberName);
    writer.writeNumberValue("ReadStatus", teamModel.readStatus);
    writer.writeStringValue("ReadStatusDisp", teamModel.readStatusDisp);
    writer.writeAdditionalData(teamModel.additionalData);
}
export interface SolvingModel extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The CreDate property
     */
    creDate?: Date;
    /**
     * The CreUser property
     */
    creUser?: string;
    /**
     * The CreUserName property
     */
    creUserName?: string;
    /**
     * The Description property
     */
    description?: string;
    /**
     * The HeadManager property
     */
    headManager?: number;
    /**
     * The Member property
     */
    member?: string;
    /**
     * The MemberName property
     */
    memberName?: string;
    /**
     * The ModDate property
     */
    modDate?: Date;
    /**
     * The ModUser property
     */
    modUser?: string;
    /**
     * The ModUserName property
     */
    modUserName?: string;
    /**
     * The NewTerm property
     */
    newTerm?: Date;
    /**
     * The Term property
     */
    term?: Date;
    /**
     * The Type property
     */
    type?: number;
    /**
     * The TypeDisp property
     */
    typeDisp?: string;
}
export interface TaskModel extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The BodyKey property
     */
    bodyKey?: string;
    /**
     * The ContactCode property
     */
    contactCode?: string;
    /**
     * The ContactName property
     */
    contactName?: string;
    /**
     * The CoreKey property
     */
    coreKey?: string;
    /**
     * The Description property
     */
    description?: string;
    /**
     * The FreeDate1 property
     */
    freeDate1?: Date;
    /**
     * The FreeDate2 property
     */
    freeDate2?: Date;
    /**
     * The FreeDouble1 property
     */
    freeDouble1?: number;
    /**
     * The FreeInt1 property
     */
    freeInt1?: number;
    /**
     * The FreeInt2 property
     */
    freeInt2?: number;
    /**
     * The FreeString1 property
     */
    freeString1?: string;
    /**
     * The FreeString2 property
     */
    freeString2?: string;
    /**
     * The FreeString3 property
     */
    freeString3?: string;
    /**
     * The HeadBodyKey property
     */
    headBodyKey?: string;
    /**
     * The HeadKey property
     */
    headKey?: string;
    /**
     * The KindCode property
     */
    kindCode?: string;
    /**
     * The KindName property
     */
    kindName?: string;
    /**
     * The Links property
     */
    links?: TaskModel_Links;
    /**
     * The Manager property
     */
    manager?: string;
    /**
     * The ManagerName property
     */
    managerName?: string;
    /**
     * The MemberBodyKey property
     */
    memberBodyKey?: string;
    /**
     * The MemberKey property
     */
    memberKey?: string;
    /**
     * The Number property
     */
    number?: string;
    /**
     * The PartChange property
     */
    partChange?: string;
    /**
     * The PartName property
     */
    partName?: string;
    /**
     * The PartNumber property
     */
    partNumber?: string;
    /**
     * The Priority property
     */
    priority?: number;
    /**
     * The Progress property
     */
    progress?: number;
    /**
     * The PublishDate property
     */
    publishDate?: Date;
    /**
     * The Publisher property
     */
    publisher?: string;
    /**
     * The PublisherName property
     */
    publisherName?: string;
    /**
     * The ReadStatus property
     */
    readStatus?: number;
    /**
     * The ReadStatusDisp property
     */
    readStatusDisp?: string;
    /**
     * The Solving property
     */
    solving?: SolvingModel[];
    /**
     * The Source property
     */
    source?: string;
    /**
     * The State property
     */
    state?: number;
    /**
     * The StateDisp property
     */
    stateDisp?: string;
    /**
     * The Team property
     */
    team?: TeamModel[];
    /**
     * The Term property
     */
    term?: Date;
    /**
     * The TermKey property
     */
    termKey?: string;
    /**
     * The Topic property
     */
    topic?: string;
    /**
     * The Type property
     */
    type?: number;
    /**
     * The TypeDisp property
     */
    typeDisp?: string;
    /**
     * The Version property
     */
    version?: number;
}
export interface TaskModel_Links extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
}
export interface TeamModel extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The BodyKey property
     */
    bodyKey?: string;
    /**
     * The BodyManager property
     */
    bodyManager?: number;
    /**
     * The CoreKey property
     */
    coreKey?: string;
    /**
     * The HeadManager property
     */
    headManager?: number;
    /**
     * The Level property
     */
    level?: number;
    /**
     * The Member property
     */
    member?: string;
    /**
     * The MemberKey property
     */
    memberKey?: string;
    /**
     * The MemberKind property
     */
    memberKind?: number;
    /**
     * The MemberName property
     */
    memberName?: string;
    /**
     * The ReadStatus property
     */
    readStatus?: number;
    /**
     * The ReadStatusDisp property
     */
    readStatusDisp?: string;
}
export const ActionDataModel_ActualElementObject = {
    Head: "Head",
    Body: "Body",
    Member: "Member",
    Core: "Core",
    Term: "Term",
} as const;
/* tslint:enable */
/* eslint-enable */
/* tslint:disable */
/* eslint-disable */
// Generated by Microsoft Kiota
import { type AdditionalDataHolder, type Parsable, type ParseNode, type SerializationWriter } from '@microsoft/kiota-abstractions';

export interface ActionDataModel extends AdditionalDataHolder, Parsable {
    /**
     * The ActualBodyKey property
     */
    actualBodyKey?: string;
    /**
     * The ActualCoreKey property
     */
    actualCoreKey?: string;
    /**
     * The ActualElement property
     */
    actualElement?: ActionDataModel_ActualElement;
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The Description property
     */
    description?: string;
    /**
     * The ProgressAdd property
     */
    progressAdd?: number;
    /**
     * The ProgressTotal property
     */
    progressTotal?: number;
    /**
     * The RealTimeAdd property
     */
    realTimeAdd?: number;
    /**
     * The RealTimeTotal property
     */
    realTimeTotal?: number;
    /**
     * The Time property
     */
    time?: Date;
    /**
     * The User property
     */
    user?: string;
}
export type ActionDataModel_ActualElement = (typeof ActionDataModel_ActualElementObject)[keyof typeof ActionDataModel_ActualElementObject];
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {ActionDataModel}
 */
export function createActionDataModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoActionDataModel;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {SolvingModel}
 */
export function createSolvingModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoSolvingModel;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {TaskModel_Links}
 */
export function createTaskModel_LinksFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoTaskModel_Links;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {TaskModel}
 */
export function createTaskModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoTaskModel;
}
/**
 * Creates a new instance of the appropriate class based on discriminator value
 * @param parseNode The parse node to use to read the discriminator value and create the object
 * @returns {TeamModel}
 */
export function createTeamModelFromDiscriminatorValue(parseNode: ParseNode | undefined) : ((instance?: Parsable) => Record<string, (node: ParseNode) => void>) {
    return deserializeIntoTeamModel;
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoActionDataModel(actionDataModel: Partial<ActionDataModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "actualBodyKey": n => { actionDataModel.actualBodyKey = n.getStringValue(); },
        "actualCoreKey": n => { actionDataModel.actualCoreKey = n.getStringValue(); },
        "actualElement": n => { actionDataModel.actualElement = n.getEnumValue<ActionDataModel_ActualElement>(ActionDataModel_ActualElementObject); },
        "description": n => { actionDataModel.description = n.getStringValue(); },
        "progressAdd": n => { actionDataModel.progressAdd = n.getNumberValue(); },
        "progressTotal": n => { actionDataModel.progressTotal = n.getNumberValue(); },
        "realTimeAdd": n => { actionDataModel.realTimeAdd = n.getNumberValue(); },
        "realTimeTotal": n => { actionDataModel.realTimeTotal = n.getNumberValue(); },
        "time": n => { actionDataModel.time = n.getDateValue(); },
        "user": n => { actionDataModel.user = n.getStringValue(); },
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoSolvingModel(solvingModel: Partial<SolvingModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "creDate": n => { solvingModel.creDate = n.getDateValue(); },
        "creUser": n => { solvingModel.creUser = n.getStringValue(); },
        "creUserName": n => { solvingModel.creUserName = n.getStringValue(); },
        "description": n => { solvingModel.description = n.getStringValue(); },
        "headManager": n => { solvingModel.headManager = n.getNumberValue(); },
        "member": n => { solvingModel.member = n.getStringValue(); },
        "memberName": n => { solvingModel.memberName = n.getStringValue(); },
        "modDate": n => { solvingModel.modDate = n.getDateValue(); },
        "modUser": n => { solvingModel.modUser = n.getStringValue(); },
        "modUserName": n => { solvingModel.modUserName = n.getStringValue(); },
        "newTerm": n => { solvingModel.newTerm = n.getDateValue(); },
        "term": n => { solvingModel.term = n.getDateValue(); },
        "type": n => { solvingModel.type = n.getNumberValue(); },
        "typeDisp": n => { solvingModel.typeDisp = n.getStringValue(); },
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoTaskModel(taskModel: Partial<TaskModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "bodyKey": n => { taskModel.bodyKey = n.getStringValue(); },
        "contactCode": n => { taskModel.contactCode = n.getStringValue(); },
        "contactName": n => { taskModel.contactName = n.getStringValue(); },
        "coreKey": n => { taskModel.coreKey = n.getStringValue(); },
        "description": n => { taskModel.description = n.getStringValue(); },
        "freeDate1": n => { taskModel.freeDate1 = n.getDateValue(); },
        "freeDate2": n => { taskModel.freeDate2 = n.getDateValue(); },
        "freeDouble1": n => { taskModel.freeDouble1 = n.getNumberValue(); },
        "freeInt1": n => { taskModel.freeInt1 = n.getNumberValue(); },
        "freeInt2": n => { taskModel.freeInt2 = n.getNumberValue(); },
        "freeString1": n => { taskModel.freeString1 = n.getStringValue(); },
        "freeString2": n => { taskModel.freeString2 = n.getStringValue(); },
        "freeString3": n => { taskModel.freeString3 = n.getStringValue(); },
        "headBodyKey": n => { taskModel.headBodyKey = n.getStringValue(); },
        "headKey": n => { taskModel.headKey = n.getStringValue(); },
        "kindCode": n => { taskModel.kindCode = n.getStringValue(); },
        "kindName": n => { taskModel.kindName = n.getStringValue(); },
        "links": n => { taskModel.links = n.getObjectValue<TaskModel_Links>(createTaskModel_LinksFromDiscriminatorValue); },
        "manager": n => { taskModel.manager = n.getStringValue(); },
        "managerName": n => { taskModel.managerName = n.getStringValue(); },
        "memberBodyKey": n => { taskModel.memberBodyKey = n.getStringValue(); },
        "memberKey": n => { taskModel.memberKey = n.getStringValue(); },
        "number": n => { taskModel.number = n.getStringValue(); },
        "partChange": n => { taskModel.partChange = n.getStringValue(); },
        "partName": n => { taskModel.partName = n.getStringValue(); },
        "partNumber": n => { taskModel.partNumber = n.getStringValue(); },
        "priority": n => { taskModel.priority = n.getNumberValue(); },
        "progress": n => { taskModel.progress = n.getNumberValue(); },
        "publishDate": n => { taskModel.publishDate = n.getDateValue(); },
        "publisher": n => { taskModel.publisher = n.getStringValue(); },
        "publisherName": n => { taskModel.publisherName = n.getStringValue(); },
        "readStatus": n => { taskModel.readStatus = n.getNumberValue(); },
        "readStatusDisp": n => { taskModel.readStatusDisp = n.getStringValue(); },
        "solving": n => { taskModel.solving = n.getCollectionOfObjectValues<SolvingModel>(createSolvingModelFromDiscriminatorValue); },
        "source": n => { taskModel.source = n.getStringValue(); },
        "state": n => { taskModel.state = n.getNumberValue(); },
        "stateDisp": n => { taskModel.stateDisp = n.getStringValue(); },
        "team": n => { taskModel.team = n.getCollectionOfObjectValues<TeamModel>(createTeamModelFromDiscriminatorValue); },
        "term": n => { taskModel.term = n.getDateValue(); },
        "termKey": n => { taskModel.termKey = n.getStringValue(); },
        "topic": n => { taskModel.topic = n.getStringValue(); },
        "type": n => { taskModel.type = n.getNumberValue(); },
        "typeDisp": n => { taskModel.typeDisp = n.getStringValue(); },
        "version": n => { taskModel.version = n.getNumberValue(); },
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoTaskModel_Links(taskModel_Links: Partial<TaskModel_Links> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
    }
}
/**
 * The deserialization information for the current model
 * @returns {Record<string, (node: ParseNode) => void>}
 */
export function deserializeIntoTeamModel(teamModel: Partial<TeamModel> | undefined = {}) : Record<string, (node: ParseNode) => void> {
    return {
        "bodyKey": n => { teamModel.bodyKey = n.getStringValue(); },
        "bodyManager": n => { teamModel.bodyManager = n.getNumberValue(); },
        "coreKey": n => { teamModel.coreKey = n.getStringValue(); },
        "headManager": n => { teamModel.headManager = n.getNumberValue(); },
        "level": n => { teamModel.level = n.getNumberValue(); },
        "member": n => { teamModel.member = n.getStringValue(); },
        "memberKey": n => { teamModel.memberKey = n.getStringValue(); },
        "memberKind": n => { teamModel.memberKind = n.getNumberValue(); },
        "memberName": n => { teamModel.memberName = n.getStringValue(); },
        "readStatus": n => { teamModel.readStatus = n.getNumberValue(); },
        "readStatusDisp": n => { teamModel.readStatusDisp = n.getStringValue(); },
    }
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeActionDataModel(writer: SerializationWriter, actionDataModel: Partial<ActionDataModel> | undefined = {}) : void {
    writer.writeStringValue("ActualBodyKey", actionDataModel.actualBodyKey);
    writer.writeStringValue("ActualCoreKey", actionDataModel.actualCoreKey);
    writer.writeEnumValue<ActionDataModel_ActualElement>("ActualElement", actionDataModel.actualElement);
    writer.writeStringValue("Description", actionDataModel.description);
    writer.writeNumberValue("ProgressAdd", actionDataModel.progressAdd);
    writer.writeNumberValue("ProgressTotal", actionDataModel.progressTotal);
    writer.writeNumberValue("RealTimeAdd", actionDataModel.realTimeAdd);
    writer.writeNumberValue("RealTimeTotal", actionDataModel.realTimeTotal);
    writer.writeDateValue("Time", actionDataModel.time);
    writer.writeStringValue("User", actionDataModel.user);
    writer.writeAdditionalData(actionDataModel.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeSolvingModel(writer: SerializationWriter, solvingModel: Partial<SolvingModel> | undefined = {}) : void {
    writer.writeDateValue("CreDate", solvingModel.creDate);
    writer.writeStringValue("CreUser", solvingModel.creUser);
    writer.writeStringValue("CreUserName", solvingModel.creUserName);
    writer.writeStringValue("Description", solvingModel.description);
    writer.writeNumberValue("HeadManager", solvingModel.headManager);
    writer.writeStringValue("Member", solvingModel.member);
    writer.writeStringValue("MemberName", solvingModel.memberName);
    writer.writeDateValue("ModDate", solvingModel.modDate);
    writer.writeStringValue("ModUser", solvingModel.modUser);
    writer.writeStringValue("ModUserName", solvingModel.modUserName);
    writer.writeDateValue("NewTerm", solvingModel.newTerm);
    writer.writeDateValue("Term", solvingModel.term);
    writer.writeNumberValue("Type", solvingModel.type);
    writer.writeStringValue("TypeDisp", solvingModel.typeDisp);
    writer.writeAdditionalData(solvingModel.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeTaskModel(writer: SerializationWriter, taskModel: Partial<TaskModel> | undefined = {}) : void {
    writer.writeStringValue("BodyKey", taskModel.bodyKey);
    writer.writeStringValue("ContactCode", taskModel.contactCode);
    writer.writeStringValue("ContactName", taskModel.contactName);
    writer.writeStringValue("CoreKey", taskModel.coreKey);
    writer.writeStringValue("Description", taskModel.description);
    writer.writeDateValue("FreeDate1", taskModel.freeDate1);
    writer.writeDateValue("FreeDate2", taskModel.freeDate2);
    writer.writeNumberValue("FreeDouble1", taskModel.freeDouble1);
    writer.writeNumberValue("FreeInt1", taskModel.freeInt1);
    writer.writeNumberValue("FreeInt2", taskModel.freeInt2);
    writer.writeStringValue("FreeString1", taskModel.freeString1);
    writer.writeStringValue("FreeString2", taskModel.freeString2);
    writer.writeStringValue("FreeString3", taskModel.freeString3);
    writer.writeStringValue("HeadBodyKey", taskModel.headBodyKey);
    writer.writeStringValue("HeadKey", taskModel.headKey);
    writer.writeStringValue("KindCode", taskModel.kindCode);
    writer.writeStringValue("KindName", taskModel.kindName);
    writer.writeObjectValue<TaskModel_Links>("Links", taskModel.links, serializeTaskModel_Links);
    writer.writeStringValue("Manager", taskModel.manager);
    writer.writeStringValue("ManagerName", taskModel.managerName);
    writer.writeStringValue("MemberBodyKey", taskModel.memberBodyKey);
    writer.writeStringValue("MemberKey", taskModel.memberKey);
    writer.writeStringValue("Number", taskModel.number);
    writer.writeStringValue("PartChange", taskModel.partChange);
    writer.writeStringValue("PartName", taskModel.partName);
    writer.writeStringValue("PartNumber", taskModel.partNumber);
    writer.writeNumberValue("Priority", taskModel.priority);
    writer.writeNumberValue("Progress", taskModel.progress);
    writer.writeDateValue("PublishDate", taskModel.publishDate);
    writer.writeStringValue("Publisher", taskModel.publisher);
    writer.writeStringValue("PublisherName", taskModel.publisherName);
    writer.writeNumberValue("ReadStatus", taskModel.readStatus);
    writer.writeStringValue("ReadStatusDisp", taskModel.readStatusDisp);
    writer.writeCollectionOfObjectValues<SolvingModel>("Solving", taskModel.solving, serializeSolvingModel);
    writer.writeStringValue("Source", taskModel.source);
    writer.writeNumberValue("State", taskModel.state);
    writer.writeStringValue("StateDisp", taskModel.stateDisp);
    writer.writeCollectionOfObjectValues<TeamModel>("Team", taskModel.team, serializeTeamModel);
    writer.writeDateValue("Term", taskModel.term);
    writer.writeStringValue("TermKey", taskModel.termKey);
    writer.writeStringValue("Topic", taskModel.topic);
    writer.writeNumberValue("Type", taskModel.type);
    writer.writeStringValue("TypeDisp", taskModel.typeDisp);
    writer.writeNumberValue("Version", taskModel.version);
    writer.writeAdditionalData(taskModel.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeTaskModel_Links(writer: SerializationWriter, taskModel_Links: Partial<TaskModel_Links> | undefined = {}) : void {
    writer.writeAdditionalData(taskModel_Links.additionalData);
}
/**
 * Serializes information the current object
 * @param writer Serialization writer to use to serialize this model
 */
export function serializeTeamModel(writer: SerializationWriter, teamModel: Partial<TeamModel> | undefined = {}) : void {
    writer.writeStringValue("BodyKey", teamModel.bodyKey);
    writer.writeNumberValue("BodyManager", teamModel.bodyManager);
    writer.writeStringValue("CoreKey", teamModel.coreKey);
    writer.writeNumberValue("HeadManager", teamModel.headManager);
    writer.writeNumberValue("Level", teamModel.level);
    writer.writeStringValue("Member", teamModel.member);
    writer.writeStringValue("MemberKey", teamModel.memberKey);
    writer.writeNumberValue("MemberKind", teamModel.memberKind);
    writer.writeStringValue("MemberName", teamModel.memberName);
    writer.writeNumberValue("ReadStatus", teamModel.readStatus);
    writer.writeStringValue("ReadStatusDisp", teamModel.readStatusDisp);
    writer.writeAdditionalData(teamModel.additionalData);
}
export interface SolvingModel extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The CreDate property
     */
    creDate?: Date;
    /**
     * The CreUser property
     */
    creUser?: string;
    /**
     * The CreUserName property
     */
    creUserName?: string;
    /**
     * The Description property
     */
    description?: string;
    /**
     * The HeadManager property
     */
    headManager?: number;
    /**
     * The Member property
     */
    member?: string;
    /**
     * The MemberName property
     */
    memberName?: string;
    /**
     * The ModDate property
     */
    modDate?: Date;
    /**
     * The ModUser property
     */
    modUser?: string;
    /**
     * The ModUserName property
     */
    modUserName?: string;
    /**
     * The NewTerm property
     */
    newTerm?: Date;
    /**
     * The Term property
     */
    term?: Date;
    /**
     * The Type property
     */
    type?: number;
    /**
     * The TypeDisp property
     */
    typeDisp?: string;
}
export interface TaskModel extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The BodyKey property
     */
    bodyKey?: string;
    /**
     * The ContactCode property
     */
    contactCode?: string;
    /**
     * The ContactName property
     */
    contactName?: string;
    /**
     * The CoreKey property
     */
    coreKey?: string;
    /**
     * The Description property
     */
    description?: string;
    /**
     * The FreeDate1 property
     */
    freeDate1?: Date;
    /**
     * The FreeDate2 property
     */
    freeDate2?: Date;
    /**
     * The FreeDouble1 property
     */
    freeDouble1?: number;
    /**
     * The FreeInt1 property
     */
    freeInt1?: number;
    /**
     * The FreeInt2 property
     */
    freeInt2?: number;
    /**
     * The FreeString1 property
     */
    freeString1?: string;
    /**
     * The FreeString2 property
     */
    freeString2?: string;
    /**
     * The FreeString3 property
     */
    freeString3?: string;
    /**
     * The HeadBodyKey property
     */
    headBodyKey?: string;
    /**
     * The HeadKey property
     */
    headKey?: string;
    /**
     * The KindCode property
     */
    kindCode?: string;
    /**
     * The KindName property
     */
    kindName?: string;
    /**
     * The Links property
     */
    links?: TaskModel_Links;
    /**
     * The Manager property
     */
    manager?: string;
    /**
     * The ManagerName property
     */
    managerName?: string;
    /**
     * The MemberBodyKey property
     */
    memberBodyKey?: string;
    /**
     * The MemberKey property
     */
    memberKey?: string;
    /**
     * The Number property
     */
    number?: string;
    /**
     * The PartChange property
     */
    partChange?: string;
    /**
     * The PartName property
     */
    partName?: string;
    /**
     * The PartNumber property
     */
    partNumber?: string;
    /**
     * The Priority property
     */
    priority?: number;
    /**
     * The Progress property
     */
    progress?: number;
    /**
     * The PublishDate property
     */
    publishDate?: Date;
    /**
     * The Publisher property
     */
    publisher?: string;
    /**
     * The PublisherName property
     */
    publisherName?: string;
    /**
     * The ReadStatus property
     */
    readStatus?: number;
    /**
     * The ReadStatusDisp property
     */
    readStatusDisp?: string;
    /**
     * The Solving property
     */
    solving?: SolvingModel[];
    /**
     * The Source property
     */
    source?: string;
    /**
     * The State property
     */
    state?: number;
    /**
     * The StateDisp property
     */
    stateDisp?: string;
    /**
     * The Team property
     */
    team?: TeamModel[];
    /**
     * The Term property
     */
    term?: Date;
    /**
     * The TermKey property
     */
    termKey?: string;
    /**
     * The Topic property
     */
    topic?: string;
    /**
     * The Type property
     */
    type?: number;
    /**
     * The TypeDisp property
     */
    typeDisp?: string;
    /**
     * The Version property
     */
    version?: number;
}
export interface TaskModel_Links extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
}
export interface TeamModel extends AdditionalDataHolder, Parsable {
    /**
     * Stores additional data not described in the OpenAPI description found when deserializing. Can be used for serialization as well.
     */
    additionalData?: Record<string, unknown>;
    /**
     * The BodyKey property
     */
    bodyKey?: string;
    /**
     * The BodyManager property
     */
    bodyManager?: number;
    /**
     * The CoreKey property
     */
    coreKey?: string;
    /**
     * The HeadManager property
     */
    headManager?: number;
    /**
     * The Level property
     */
    level?: number;
    /**
     * The Member property
     */
    member?: string;
    /**
     * The MemberKey property
     */
    memberKey?: string;
    /**
     * The MemberKind property
     */
    memberKind?: number;
    /**
     * The MemberName property
     */
    memberName?: string;
    /**
     * The ReadStatus property
     */
    readStatus?: number;
    /**
     * The ReadStatusDisp property
     */
    readStatusDisp?: string;
}
export const ActionDataModel_ActualElementObject = {
    Head: "Head",
    Body: "Body",
    Member: "Member",
    Core: "Core",
    Term: "Term",
} as const;
/* tslint:enable */
/* eslint-enable */

Here's code I'm using for fetching. Interestingly, the property task?.number is undefined, yet task?.Number returns a normal result.

const task = await client.tSK.tasks.all.byId(context.params.id).get();
console.log(task?.number, task?.Number);

@baywet
Copy link
Member

baywet commented Apr 19, 2024

Thank you for the additional details here.
This is indeed a bug, and I have authored #4521 to address this issue.

@baywet baywet added type:bug A broken experience and removed question Needs: Attention 👋 labels Apr 19, 2024
@baywet baywet self-assigned this Apr 19, 2024
@baywet baywet added this to the Kiota v1.14 milestone Apr 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type:bug A broken experience TypeScript Pull requests that update Javascript code
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

2 participants