В потоке javascript + отправьте строку? В функцию, которая ожидает строку - PullRequest
0 голосов
/ 20 июня 2020

Я хочу выполнить func3(MY_VAR), но func3 ожидает строку, поэтому простое выполнение func3(MY_VAR) вызовет ошибку типа.

Я не могу запускать func3, если MY_VAR undefind или null, но нахожу здесь использование оператора if очень неуклюжим.

const MY_VAR: ?string = //Can be a string or undefined or null ....
const needToRunMulitipleFunctions = () => {
    func1();
    func2();
};

Как мне сделать это элегантно, не используя внутри неприятного if / else?

1 Ответ

0 голосов
/ 20 июня 2020

Поскольку MY_VAR может быть строкой, а func3 принимает только строку, вы должны где-нибудь в своем коде выполнить какую-то проверку условного типа. В противном случае ваш код ненадежен и содержит потенциальные ошибки.

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

let MY_VAR: ?string; //Can be a string or undefined or null ....

const func1 = () => {}
const func2 = () => {}
const func3 = (a: string) => {}
const func3WithCheck = (a: ?string) => {
    if (typeof a !== 'string') return;

    a.substring(0);
};

const needToRunMulitipleFunctions = () => {
    func1();
    func2();
    MY_VAR && func3(MY_VAR);
    func3(MY_VAR);
    func3();
    func3WithCheck(MY_VAR);
    //I want to do func3(MY_VAR), but func3 expects a string, so just doing func3(MY_VAR) will raise a type error. I am ok not running func3 if MY_VAR is undefind or null, but find using an if statement here very clumsy.
};

И вот он работает в Ьгу потока https://flow.org/try/#0DYUwLgBAsgmg + gNQIICUBcED8BnMAnASwDsBzAbggHpKBhAQyIgCMQI6JdDSIB7PCAK5EAJiABmxEMN78iA4MAgA6FUoBQagMY8iuCGKGaAjBAC8EABQBKMwD4IAbwC + WnXoNFNAJjOWbp + 2dXXUgPTQBmXws6DE5iEn9Al20Q-UNwgHUCMAALGhyQTQBrKJisONJExzUIWogCMUswAE8ABxAeRvYAQlNzAHIKkn6bPHABPCIyDTq2JWwBJiGLAAYraadp4L0iECkAFR4UISh5bIJW0AAxQzACNyiqhxq6sKNradmwrw + X2thEKgIAAyYFpTzhCwA5AodZ-cERKHwGFwr7pX5oiFZXL5QpFJGA2GfOrUACSEAA7gxIGAeBBhHSwpDoagrAAaZgCULpCAgAAe7U0YGwbA4 + HiHOwdIAVgI9Az4gjmcjWZSCAoIHg6ARsKx2C12ry8Hg + EoIOS6ABbXglIg8SB4IRERVM + qNFkoeoioSiCQiGQQOQKDlMLn6YjSOWKhhusV0MAgS0gIiQApjCAANxAeGaEE0wAEluwzXUmyAA

...