И для того чтобы они (discriminated unions) работали надо чтобы type был string literal, а не просто string То есть надо type LoadAction = { type: 'LOAD' } Так вот с const expressions вы можете написать as const и type widening-а не произойдет
-
Prikaži ovu nit
-
type widening это когда в результате некоторых манипуляций тип становиться менее строгим вот мы возращаем в нашем экшене объектный литерал { type: 'LOAD' } Но ТС справедливо считает что мы можем сделать вот так const loadAction = createLoadAction() loadAction.type = 'HECK'
1 reply 0 proslijeđenih tweetova 0 korisnika označava da im se sviđaPrikaži ovu nit -
Поэтому ему надо подсказать что литерал будет иммутабельный const createLoadAction = () => ({ type: 'LOAD' } as const) type LoadAction = ReturnType<typeof createLoadAction> // { type: 'LOAD' } УРА
1 reply 1 proslijeđeni tweet 3 korisnika označavaju da im se sviđaPrikaži ovu nit -
as const работает не только на объектных литералах но и на обычных то есть можно написать const createLoadAction = () => ({ type: 'LOAD' as const }) и эффект будет похожим за тем исключением что остальные поля объекта останутся мутабельными
0 proslijeđenih tweetova 1 korisnik označava da mu se sviđaPrikaži ovu nit -
В 3.5 наконец-то добавили хелпер Omit в стандартную поставку В 3.6 нормально затипизировали генераторы https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-6.html#stricter-generators …
1 reply 0 proslijeđenih tweetova 2 korisnika označavaju da im se sviđaPrikaži ovu nit -
В 3.7 в срочном порядке добавили поддержку nullish coalescing и optional chaining (причем прямо с 3-его стейджа ЕМНИП, рисковые парни) И assertion functions type-guards и custom type-guards у нас уже были, но они возвращали boolean Соотвественно надо было обкладываться if-ами
1 reply 0 proslijeđenih tweetova 1 korisnik označava da mu se sviđaPrikaži ovu nit -
Assertion function это история про exception flow control То есть проверили предусловия контракта и пошли дальше писать код без вложенности https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions …
0 proslijeđenih tweetova 1 korisnik označava da mu se sviđaPrikaži ovu nit -
Еще в 3.6 пофиксили некоторые рекурсивные типы https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#more-recursive-type-aliases … Раньше можно было делать рекурсивные типы когда исходный тип не участвовал в рекурсивном юнионе напрямую Нихера на словах непонятноhttps://www.youtube.com/watch?v=LAAhV3xHmBo&feature=youtu.be&t=3m …
1 reply 0 proslijeđenih tweetova 1 korisnik označava da mu se sviđaPrikaži ovu nit -
Короче вот так было можно type Tree<T> = { value: T, children: Tree<T>[] } а вот так вот нельзя type Json = | string | number | boolean | null | Record<any, Json> | Json[] Начиная с 3.6 можно и вот так ^
1 reply 0 proslijeđenih tweetova 2 korisnika označavaju da im se sviđaPrikaži ovu nit -
Кстати до 3.6 был интересный хак чтобы обходить такое Дело в том что по стечению обстоятельств type вычисляется eager, а вот interface - lazy Это позволяло оборвать бесконечную рекурсию вот таким способом:
1 reply 0 proslijeđenih tweetova 2 korisnika označavaju da im se sviđaPrikaži ovu nit
type Json = | string | number | boolean | null | JsonObject | JsonArray; interface JsonObject { [property: string]: Json; } interface JsonArray extends Array<Json> {}
-
-
jsunderhood je proslijedio/a tweet korisnika/ce./orta --tsc
В 3.8 нас главным образом ожидают очередные новые фичи ECMAScript (например top-level await), но самая мякотка в type-only imports https://twitter.com/dskr_dev/status/1222459610663202816 … Если интересно чем это хорошо - почитайте вот этот тредикhttps://twitter.com/orta/status/1222235666148405250 …
jsunderhood je dodan/na,
./orta --tsc @ortaIf you’re wondering a bit about what the use-case for `import type` is used for in@typescript 3.8 - one of it’s main use cases will make@babeljs’ life a lot easier https://www.typescriptlang.org/v2/en/play?ts=3.8.0-beta#code/PTAEBkHtIa1BDALqRALApqAUgZQDQqoCWAzqKQHYDkyRFAxgDYCuAJuq+RYZpM4gAd+AWABQRALYDIAJ2QBvACLwKAc3QzFOcABUAngPQBfUADMZkCaABErFepnWxY9k3gzM9SBRLIJerXAALlBlNQ1A-UNnUX9AgDoAIyJEROZ6GHREAH0mPlYYkFAAeW40XnKZUFQVVgI0UlBvTFJ4trFJaTlQeTtwmRNzSxs+hydRUY141RTCsAAhflAAd1Q9AH450B0cUEz0ATJEGXgMptMVjEqEbk7ZWjJ4G1xrUAA3eBZ0MSLZBG2DOgcPQZEQBMhEID4h0pPcemEHIFcMUAHJRdAECToEgkeDqQYWKy2ewacZYnF476iH4LeCJdCMUD0FQUSDIViQQikACEWxwnNZy1A8zpDL2gqONVoyGZ3E+y3gejIJBgYJ4JCpRSod26kMMVFAviQ6CxFEQJBhXQhgPhJJkAFVEERGCRAgThsT+uMacL0MzmBqeHomSoaKB6aAAxwVilUM8cK8Pl8SEFLXC9Zh5BJ3DAOcsKO6iZNHEA …1 reply 0 proslijeđenih tweetova 2 korisnika označavaju da im se sviđaPrikaži ovu nit -
Ну вот и все про историю! Пойду поработаю, следующий тред будет про то как я вижу идеальный проект на ТС
0 replies 0 proslijeđenih tweetova 3 korisnika označavaju da im se sviđaPrikaži ovu nit
Kraj razgovora
Novi razgovor -
Čini se da učitavanje traje već neko vrijeme.
Twitter je možda preopterećen ili ima kratkotrajnih poteškoća u radu. Pokušajte ponovno ili potražite dodatne informacije u odjeljku Status Twittera.