Posiadam program napisany w QML i typescript w którym to z poziomu QML wywołuję funkcje typescriptowe.
Po stronie QML jest coś takiego
f.findSomething(undefined)
a w typescript coś takiego
export function findSomething(what: string) {
if (what == "LEFT") {
return true;
}
return false;
}
widać że funkcja oczekuje stringa a wrzucany jest do niej undefined, którego się nie spodziewa, ale też żaden błąd typu nie wyskakuje, bo przy konwersji do javascript typy są zapominane.
Walidacja pojedynczo parametrów na początku funkcji odpada, bo funkcji jest po prostu zbyt dużo i bardzo łatwo jest o pomyłkę a i zmiany parametrów funkcji byłyby bardziej problematyczne.
Myślałem nad może jakimiś wraperami na funkcje, które automatycznie weryfikowałyby typ(nie wartość) np.
@verifyParamsInRuntime
export function findSomething(what: string)
który by się konwertował na taki kod
export function findSomething(what: string) {
console.assert(type(what) == "string")
#programowanie
#typescript
#webdev
Hepar

Dokładnie tak, typeof what === 'string'


A jeżeli chcesz coś mega pro co nie przepuści żadnego stringa to:


function isString (what: unknown) {

return (Object.prototype.toString.call(what) === '[object String]');

}


Różnica jest taka, że gdy 'what' zainicjujesz w ten sposób: "let what = new String('LEFT') to pierwszy sposób zwróci false, a drugi true


function isString (obj: unknown) {

return (Object.prototype.toString.call(obj) === '[object String]');

}


let x = new String('some txt');


console.log(typeof x === 'string') // false

console.log(isString(x)) /// true

krokietowy

@Hepar Tyle że takich funkcji są dziesiątki i pisanie tego dla każdego argumentu zrobi jeszcze więcej zamieszania, więc szukam jakiejś automatycznej metody na robienie tego.

Hepar

@krokietowy A czy w typescripcie masz funkcje czy klasy z metodami? Bo Dekoratory typescriptowe tylko do metod można podłączyć - https://www.typescriptlang.org/docs/handbook/decorators.html

krokietowy

@Hepar Tylko funkcje,

Na dekoratory patrzyłem już kiedyś i myślałem że może ktoś z nimi już coś podobnego zrobił(dynamicznych języków używam dość rzadko, więc od zera trochę by mi to zeszło by zrozumieć), ale skoro działają one tylko na klasach to raczej całkowicie odpadają

Zaloguj się aby komentować