Семантика необязательных параметров в машинописном тексте - PullRequest
1 голос
/ 09 июля 2020

Как пользователь другого кода, я хочу иметь возможность посмотреть функцию и выяснить, что требуется, в зависимости от того, является ли тип необязательным.

Например:

function doSomething(required: string, optional?: string)

Но как разработчик, который пишет код для кого-то другого, я хочу по-прежнему обозначать, что параметр требуется, но я хочу, чтобы проверка типа не требовалась, поскольку я не могу гарантировать, что мой конечный пользователь также использует машинописный текст и Я хочу изящно справляться с неверными аргументами.

Можно ли получить мой торт и тоже его съесть? Могу ли я обозначить параметр как необязательный, но все равно получаю ошибки компиляции, если я не проверяю или не обрабатываю неопределенный аргумент? *

Или решение просто иметь предварительные условия для всех обязательных полей?

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Необязательный параметр при вызове можно не указывать. Обязательный параметр, набранный как T | undefined, по-прежнему должен присутствовать, хотя вы можете передать undefined

function doSomething(required: string, optional: string | undefined) {

}

doSomething("") // error in TS
doSomething("", undefined) 

Playground Link

Если пользователь не использует Машинопись ничего из этого не имеет особого значения, поскольку пользователь в любом случае может передать меньше параметров.

function doSomething(required: string, optional: string) {

}

doSomething("") /// Bad in ts, but fine in JS

Ссылка на игровую площадку

0 голосов
/ 09 июля 2020

Если нужно не забывать обрабатывать неопределенные случаи, даже если требуется значение, тогда вы можете переделать переданные параметры, и машинописный текст будет кричать вам во время компиляции за то, что вы не проверяете, является ли это измененное значение undefined * вот пример, в котором я использовал as string | undefined внутри функции, пользователь функции увидит, что все параметры обязательны, но вы все равно будете защищаться.

  function doSomthingElse(requiredString1: string, requiredString2: string) {}

  function doSomething(required: string, required2: string) {
    const recasted = required2 as string | undefined

    doSomthingElse(required, recasted) //TS2345: Argument of type 'string | undefined' is not assignable to parameter of type 'string
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...