Size: a a a

2020 December 17

DK

Dan Kozlov in Svelte [svelt]
Dan Kozlov
Первое — ну хоть такой банальный пример из моего ишью давнего по этому поводу: https://github.com/sveltejs/language-tools/issues/272

В остальном есть некоторые детали. Например, синтаксический сахар для сторов ($) каждый раз порождает новый объект, поэтому если у тебя есть стор let store: Writable<string | null>, ты делаешь {#if $store}{$store}{/if}, то внутри ифов, внимание, будет string | null. Да. Косяк реализации, с ним очень некомфортно. Вот для этой и других вещей в целом бывает полезно.
С этим мне в этом же чате рекомендовали тайп гарды писать, так и живу. Чаще всего можно что-то придумать, чтобы без этого обходиться.
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Dan Kozlov
Первое — ну хоть такой банальный пример из моего ишью давнего по этому поводу: https://github.com/sveltejs/language-tools/issues/272

В остальном есть некоторые детали. Например, синтаксический сахар для сторов ($) каждый раз порождает новый объект, поэтому если у тебя есть стор let store: Writable<string | null>, ты делаешь {#if $store}{$store}{/if}, то внутри ифов, внимание, будет string | null. Да. Косяк реализации, с ним очень некомфортно. Вот для этой и других вещей в целом бывает полезно.
чето не въехал, а что должно быть внутри if'ов ?
источник

DK

Dan Kozlov in Svelte [svelt]
Кирилл Спасибович
чето не въехал, а что должно быть внутри if'ов ?
<script lang="ts">
 import { writable } from 'svelte/store';

 const store = writable<string | null>(null),
   toUppercase = (str: string) => str.toUpperCase();
</script>

{#if $store}
 {toUppercase($store)}
{/if}


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

КС

Кирилл Спасибович... in Svelte [svelt]
ну тут похожая штука как в ишаке
источник

КС

Кирилл Спасибович... in Svelte [svelt]
а зачем тебе null ?
источник

КС

Кирилл Спасибович... in Svelte [svelt]
может проще сделать какое-то initial value типа строки, и если оно - то не показывать, а если не оно то показывать ?
источник

КС

Кирилл Спасибович... in Svelte [svelt]
хотя погоди, ты же типа проверил
источник

КС

Кирилл Спасибович... in Svelte [svelt]
что if store, тогда toUppercase
источник

КС

Кирилл Спасибович... in Svelte [svelt]
т.е. если null этот код не выполняется
источник

DK

Dan Kozlov in Svelte [svelt]
Кирилл Спасибович
ну тут похожая штука как в ишаке
Не совсем. В ишаке там показана ситуация, когда я через проверку второй переменной знаю, что первая имеет определённый тип.
А тут речь именно про синтаксический сахар для сторов. Я так понимаю, он под капотом использует что-то вроде
type StoreValue<T> = T extends Readable<infer U> ? U : T
, и этот тип используется для каждого нового сахара, поэтому сужение типов не происходит при работе с шаблонами.
источник

КС

Кирилл Спасибович... in Svelte [svelt]
а в обычном ts'е ты получается так проверяешь, если не null то uppercase и всё работает
источник

КС

Кирилл Спасибович... in Svelte [svelt]
ты типа ts'у показал что хендлишь все возможные косяки
источник

DK

Dan Kozlov in Svelte [svelt]
Кирилл Спасибович
может проще сделать какое-то initial value типа строки, и если оно - то не показывать, а если не оно то показывать ?
Ну это синтетический пример. Там может быть стор с двумя разными типами данных, может быть объект с опциональными ключами, и т.д. Суть остаётся.
источник

КС

Кирилл Спасибович... in Svelte [svelt]
infer берёт тип который ты передал аргументом как начальное значение в стор ?
пойду в гугл покурю как эта типовая штука работает, сложна :)
источник

DK

Dan Kozlov in Svelte [svelt]
Я сам её не понимаю, лол, каждый раз наощупь подбираю методом проб и ошибок.
источник

DK

Dan Kozlov in Svelte [svelt]
И копипасты. Главным образом копипасты.
источник

КС

Кирилл Спасибович... in Svelte [svelt]
Dan Kozlov
Я сам её не понимаю, лол, каждый раз наощупь подбираю методом проб и ошибок.
а делает она что ? :)
источник

КС

Кирилл Спасибович... in Svelte [svelt]
это какой-то дженерик для значения стора ?
источник

DK

Dan Kozlov in Svelte [svelt]
Ага, именно
источник

КС

Кирилл Спасибович... in Svelte [svelt]
а что за условие? получилось ли заинферить начальное значение ?
источник