Подтвердить что ты не робот

Как я могу проверить, был ли предоставлен дополнительный параметр?

Дана функция с необязательными параметрами:

function DoSomething(a, b?) {
    /** Implementation */
}

Как определить, был ли необязательный параметр предоставлен внутри тела функции? В настоящее время лучший способ сделать это, о чем я могу подумать, это:

typeof b === 'undefined'

Но это немного грязно и не так просто для чтения. Поскольку TypeScript обеспечивает поддержку необязательных параметров, я надеюсь, что он также имеет интуитивно понятный способ проверить, был ли предоставлен параметр.

Как показывает приведенный выше пример, я не возражаю против того, был ли необязательный параметр явно установлен на undefined или не указан вообще.

Изменить

К сожалению, этот вопрос был не так ясен, как следовало бы, особенно если он читал. Он предназначен для того, чтобы точно проверить, полностью ли опущен необязательный параметр, например:

DoSomething("some value");

Я принял ответ эвана, поскольку его решение (b === undefined) чище, чем решение в моем вопросе (typeof b === 'undefined'), и при этом все еще ведет себя так же.

Другие ответы определенно полезны, и какой ответ является правильным для вас, зависит от вашего варианта использования.

4b9b3361

Ответ 1

Вы можете просто проверить значение, чтобы увидеть, если он undefined:

var fn = function(a, b) {
    console.log(a, b === undefined);
};

fn(1);
fn(2, undefined);
fn(3, null);

Ответ 2

После поиска в googling typescript проверьте undefined ", я увидел этот вопрос в верхней части результатов, но ответ, данный Эван Тримболи, не решил мою проблему.

Вот ответ , который в конечном итоге решил мою проблему. Следующий код - это то, на чем я остановился. Он должен работать в случаях, когда значение равно null или undefined:

function DoSomething(a, b?) {
    if (b == null) doSomething();
}

Ответ 3

TypeScript util модуль имеет функцию isUndefined(). Вы можете использовать его так.

import {isUndefined} from "util";

class A {
    test(b?: string): string {
        if (isUndefined(b)) {
            return "UNDEFINED";
        } else {
            return ("DEFINED" + b);
        }
    }
}

Ответ 4

вы можете просто добавить необязательный параметр со значением по умолчанию, подобным этому

function DoSomething(a, b: boolean=null) {
    if(b == null)
    {
      //parameter was not set
    }
    else
    {
    //parameter is true or false...no other option available
    }
}

Ответ 5

С здесь работает без проблем:

function getSchool(name: string, address?: string, pinCode?: string): string {
    if (typeof address === 'undefined') {
        console.log('address not defined');
    }
    if (typeof pinCode === 'undefined') {
        console.log('pincode not defined');
    }
    //...
}