Merged
requested to merge github/fork/asmundg/asmundg/typescript-fetch/additional-properties-safety into master
Created by: asmundg
Instead of asserting that any key access returns a valid property, force the consumer to check that the value is defined.
When declaring an object with additional properties
/store/inventory:
get:
tags:
- store
summary: Returns pet inventories by status
description: Returns a map of status codes to quantities
operationId: getInventory
produces:
- application/json
parameters: []
responses:
'200':
description: successful operation
schema:
type: object
additionalProperties:
type: integer
format: int32
The generated interface is unsafe, because it asserts that any property access on the response returns a value. In reality, a property access can return undefined, which will cause a runtime failure.
async getInventory(): Promise<{ [key: string]: number; }
If the compiler is running with strict null checking, we can avoid the problem by declaring that property access can return undefined, forcing the consumer to verity that they got an actual value:
async getInventory(): Promise<{ [key: string]: number | undefined; }>
PR checklist
-
Read the contribution guidelines. -
If contributing template-only or documentation-only changes which will change sample output, build the project before. -
Run the shell script(s) under ./bin/
(or Windows batch scripts under.\bin\windows
) to update Petstore samples related to your fix. This is important, as CI jobs will verify all generator outputs of your HEAD commit, and these must match the expectations made by your contribution. You only need to run./bin/{LANG}-petstore.sh
,./bin/openapi3/{LANG}-petstore.sh
if updating the code or mustache templates for a language ({LANG}
) (e.g. php, ruby, python, etc). -
File the PR against the correct branch: master
,4.3.x
,5.0.x
. Default:master
. -
Copy the technical committee to review the pull request if your PR is targeting a particular programming language.
cc @TiFu @taxpon @sebastianhaas @kenisteward @Vrolijkx @macjohnny @nicokoenig @topce @akehir @petejohansonxo