Dev Perfects
40 subscribers
9.23K photos
1.26K videos
468 files
13K links
بخوام خیلی خلاصه بگم
این کانال میاد مطالب کانالای خفن تو حوزه تکنولوژی و برنامه نویسی رو جمع میکنه

پست پین رو بخونید
https://t.iss.one/dev_perfects/455


ارتباط:
https://t.iss.one/HidenChat_Bot?start=936082426
Download Telegram
Forwarded from 
TypeDoc.org

TypeDoc converts comments in TypeScript source code into rendered HTML documentation or a JSON model. It is extensible and supports a variety of configurations. Available as a CLI or Node module.

#typescript #FLOSS #tool #معرفی
@amiria703_channel
Forwarded from Accio
A #typescript trick that was useful to me today:
type NullableKeys<T> = {
[K in keyof T]: undefined extends T[K] ? K : never;
}[keyof T];

export type MakeOptionalPropertiesNullable<T> = {
[K in Exclude<keyof T, NullableKeys<T>>]: T[K];
} & {
[K in NullableKeys<T>]: T[K] | null;
};

MakeOptionalPropertiesNullable will make optional fields of T accept null as well as their type. e.g:
interface User {
name: string;
lastName?: string;
}

Will be transformed into:
interface NewUser {
name: string;
lastName?: string | null;
}


How is this useful?
Working with different controllers, validators or even ORMs might produce situations like this. For example in Prisma schemas any optional value is simply nullable so for an easier type mapping you might want to introduce a persistence model from your read model via this type mapper.
Or you want to accept both null and undefined from your users but don't want to clutter your domain types with it

How is this even working?
We are taking advantage of typescript mappers/transformers. NullableKeys<T> first creates a type that assigns never to any property of T that is not optional (deciding with undefined extends T[K]) and at the end it will get the keys of the transformed object (which will skip any field that has the type never). So we end up with a type like below:
"field1" | "field2" | "field3" | ...

What now? now we pass our type to MakeOptionalPropertiesNullable<T> which at first, goes through any key of T that is not included in NullableKeys<T>. Meaning any key that isn't optional. We don't want to touch those so we simply assign their respective types via T[K]. Now it's time for optional keys to join the party. They will be assigned their own types along side a | null to make them nullable. A simple & will seal the deal at the end.
Forwarded from Anophel | آنوفل
🔹یکی از دوستان ی پروژه ای نوشته بودن و از تایپ اسکریپت اومدن استفاده کردن، بعد قرار شد کد هاش بررسی کنم و مواردی که حالا نیاز بود رعایت کنه رو بگم. اینجام قرار میدم که همه مون تو پروژه های آینده مون استفاده کنیم ازش.

🫶1. از Mapped Types استفاده کنید.
حالا Mapped Types در TypeScript به شما اجازه میده تا نوع‌های جدیدی را بر اساس نوع‌های موجود ایجاد کنید. با استفاده از یک نوع ژنریک ( Generic) که از یک union از PropertyKeyها (معمولاً با استفاده از keyof ایجاد میشه) برای تکرار کلیدها و ایجاد یک نوع جدید انجام میشه.

🫶2. از آپشنال chaining ?. استفاده کنید.
این باعث میشه دیگه نگران مقدار های null یا undefined نباشید.

🫶3. از Utility Types استفاده کنید.
حالا Utility Types در TypeScript مجموعه‌ای از نوع‌های از پیش تعریف شده هستند که به شما کمک می‌کنند تا تغییرات و عملیات‌های رایج روی نوع‌ها را انجام بدید. این نوع‌ها به شما اجازه میده تا نوع‌های جدیدی بر اساس نوع‌های موجود ایجاد کنید، پراپرتی ها Partial یا Required و همچنین Readonly کنید، نسخه‌های غیرقابل تغییر از نوع‌ها بسازید و ...

🫶4. استفاده از Branded Types
اینم قشنگه و در تایپ‌اسکریپت یک روش برای ایجاد انواع یونیک است که از اشتباهات لاجیکال جلوگیری میکنه. این نوع‌ها با اضافه کردن یک ویژگی خاص به نوع اصلی، به نوعی “برند” می‌شوند.
دقت کنید این ویژگی در زمان اجرا وجود ندارد، اما به کامپایلر تایپ‌اسکریپت کمک می‌کند تا تفاوت بین انواع مختلف را تشخیص بده.

موارد دیگه ای هم بودن، در پست های آینده بهش می پردازیم.

موردی هم بود حتما در بخش کامنت ها بنویسید ♥️

Anophel | آنوفل

#تایپ_اسکریپت #ts #typescript
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from FullstacksJS — Academy
قسمت چهارم ماب ریویو: معماری نرم افزار و DDD

تو این جلسه یک پروژه NestJS رو با هم ریویو می‌کنیم.

مشاهده ویدئو


اگر علاقه دارید می‌تونید کدهاتون رو برای من بفرستید تا توی این جلسه‌ها با همدیگه ریویوشون کنیم.

مباحث
00:00 ماب ریویو چیه؟
01:06 درباره پروژه؟
02:32 پارادایم Reactive Programming
03:55 معماری های Hexagonal
05:39 تعریف و انواع وابستگی توی معماری
06:55 مفهوم Dependency Inversion
13:41 مفهوم Dependency Injection
17:35 استفاده این مفاهیم توی معماری
20:08 لایه Domain توی معماری Clean
21:10 مزیت نام گذاری روی معماری‌ها و پترن‌ها
21:57 ‏Domain Driven Design چیه؟
34:24 معرفی منابع برای DDD
37:53 پرکیتس ها و اهمیت Communication
42:39 مسئولیت لایه Application
44:43 آنتی پرتن Anemic domain
46:48 مفهوم Ubiquitous language و Bounded Context
53:16 مفاهیم Strategic design و Tactical Design
54:29 فرق بین Value Object و Entity
1:00:42 مفهوم Domain Event
1:02:00 مفهوم Aggregate root
1:05:34 استفاده از این مفاهیم تو NestJS
1:06:53 مفهوم persistence ignorance
1:09:06 بی اهمیت بودن ابزارها و اهمیت نیاز بیزینس
1:12:03 چرا مقایسه ابزارها درست نیست
1:14:29 کجا باید از DDD استفاده کنیم؟
1:15:41 چرا کسب تجربه توی DDD سخته؟
1:16:34 پترن CQRS
1:19:26 چرا نباید همه جا از پترن‌ها و معماری‌ها استفاده کنیم؟


ماب ریویو چیه؟

سورس کد

اضافه کردن به تقویم


#mobreview #nestjs #cqrs #designpatterns #ddd #cleanarchitecture #hexagonarchitecture #mongodb #typescript #nodejs
💎 استخراج نوع آیتم از یک آرایه در Typescript 💎

فرض کنید، یک DataType مشخص دارید (مثلاً از یک API) و دیتای شما به شکل آرایه‌ای از آبجکت‌ها هست و میخواید فقط تایپ آیتم‌های این آرایه رو استخراج کنید بدون اینکه تایپ آیتم از قبل به صورت جدا تعریف شده باشه، توی این پست قراره با یه مثال ساده به حل کردن این مسئله بپردازیم

کد اولیه ما به این شکله 🔻
type GetAllUsersResponse = {
getAllUsers: Array<{
id: number;
name: string;
email: string;
}>;
};

const response: GetAllUsersResponse = {
getAllUsers: [ ... ],
};


حالا برای استخراج نوع آیتم های آرایه getAllUsers، میتونیم از [number] استفاده کنیم 🔻
type UserItem = GetAllUsersResponse['getAllUsers'][number];

وقتی که [number] جلوی یک تایپ آرایه قرار میگیره، به typescript میگه که فقط نوع آیتم آرایه رو میخوام


📊 جمع بندی

حالا شاید پیش خودتون بگید که چرا باید از این روش استفاده بکنم ؟ چرا اصلا نیام و به صورت جدا تعریف بکنم تایپ User رو ؟ 🤔

درواقع این چالش بیشتر توی مواردی به وجود میاد که DataType شما مشخصه از قبل، مثل وقتی که از Graphql Codegen توی پروژتون استفاده میکنید، Codegen درواقع کارش اینه که Schema GraphQL رو به صورت اتومات به typescript تبدیل کنه تا دیگه مجبور نباشید تایپ ریسپانس API رو خودتون تعریف کنید.
یکی دیگه از دلایلی که عاشق گرف‌کیو‌الم :)


امیدوارم از این مطلب لذت برده باشید، با ری‌اکشنای خودتون بهمون انرژی بدید ❤️‍🔥

#️⃣ #typescript #tricks

🫶 𝗖𝗛𝗔𝗡𝗡𝗘𝗟  |  𝗚𝗥𝗢𝗨𝗣
💎 بررسی Utility Type‌ها در TypeScript 💎

بعضی وقت ها تو تایپ‌اسکریپت, نوع خاصی از type یا interface موجود نیازمون میشه، مثل optional یا required کردن تمامی پورپرتی های تایپ، یه همچین مواردی رو میتونیم خیلی ساده با Utility Type‌ها به شکل مد‌نظرخون تغییر بدیم، تقریبا میشه گفت یک instance با تغییرات و شرطهایی ازشون بسازیم....
#typescript


کاربردی ترین Utility Type‌ها

Partial<Type>

تمام ویژگی‌های یک تایپ رو اختیاری می‌کنه.
type User = { id: number; name: string };
type PartialUser = Partial<User>; // { id?: number; name?: string }


Required<Type>

تمامی پروپرتی‌های یک تایپ رو اجباری می‌کنه.
type User = { id?: number; name?: string };
type RequiredUser = Required<User>; // { id: number; name: string }


Readonly<Type>

تمام پروپرتی‌های تایپ رو ReadOnly می‌کنه.
type User = { id: number; name: string };
type ReadonlyUser = Readonly<User>; // { readonly id: number; readonly name: string }

یعنی اگر بعد از تعریف آبجکت بخواید مقدار یکی از پروپرتی‌های اون آبجکت رو تغییر بدید بهتون ارور میده.


Pick<Type, Keys>

این یکی واقعا کاربردیه و کارش اینه که فقط ویژگی‌های مشخص‌شده از یک تایپ رو برگردونه.
type User = { id: number; name: string; email: string };
type PickedUser = Pick<User, 'id' | 'name'>; // { id: number; name: string }

به Pick باید دو تا مقدار پاس بدید، اول تایپ مد نظرتون و دوم لیست پراپرتی‌ها که می‌خواهید از نوع اولیه انتخاب کنید به این شکل : 'id' | 'name'


Omit<Type, Keys>

ویژگی‌های مشخص‌شده رو از یک تایپ حذف می‌کنه.
type User = { id: number; name: string; email: string };
type OmittedUser = Omit<User, 'email'>; // { id: number; name: string }

این یکی نحوه کارکردش مثل Pick هستش فقط به جای اینکه لیستی که بهش میدید رو ففط برگردونه میاد و فاکتور میگیره از تایپ حذف می‌کنه.


امیدوارم از این مطلب لذت برده باشید، با ری‌اکشنای خودتون بهمون انرژی بدید ❤️‍🔥

🚀 @CoolyCode
Forwarded from Code Module | کد ماژول (Mahan-Heydari)
🥶 چه آینده ای در انتظار Typescript هست ؟

🔵تایپ‌اسکریپت 5.8.2 آخرین نسخه رسمی که تا امروز (13 مارس 2025) منتشر شده، که در 27 فوریه 2025 اومده. این نسخه بیشتر روی بهبودهای کوچک و رفع مشکلات تمرکز داشته و چیز خیلی عجیب و غریبی توش نیست. طبق اعلام تیم تایپ‌اسکریپت توی وبلاگ رسمی‌شون، چندتا تغییر اصلی داشته:

بهبود type checking ها: مثلاً بررسی دقیق‌تر تایپ هایی که توی شرط‌ها برمی‌گردن یا وقتی به یه چیزی با ایندکس دسترسی پیدا می‌کنی.

پشتیبانی بهتر از ابزارهای ویرایشگر : مثل مرتب کردن importها بدون توجه به بزرگ یا کوچیک بودن حروف، که با بقیه ابزارها بهتر جور دربیاد.

رفع اشکالات: یه سری باگ‌های نسخه‌های آزمایشی رو درست کردن.

‼️این نسخه بیشتر یه به‌روزرسانی معمولی بود و برای اکثر برنامه‌نویس‌ها تغییر بزرگی توی کارشون ایجاد نکرد، مگر اینکه از یه سری ویژگی خاص استفاده می‌کردن که حالا دقیق‌تر شده.

⚡️حالا خبر بزرگ : تایپ‌اسکریپت 7.0 با زبان Go

حالا بریم سراغ چیزی که همه رو توی شبکه‌های اجتماعی و جاهای دیگه هیجان‌زده کرده. طبق پست‌هایی که توی X دیدم و یه اعلامیه که ظاهراً 11 مارس 2025 توی وبلاگ تایپ‌اسکریپت منتشر شده، تیم مایکروسافت داره روی یه نسخه کاملاً جدید کار می‌کنه که با زبان Go بازنویسی شده. یعنی کمپایلر تایپ‌اسکریپت که الان با خودش نوشته شده و به جاوااسکریپت تبدیل می‌شه، قراره به یه برنامه مستقل و سریع با Go تبدیل بشه.

👩‍💻چرا Go رو انتخاب کردن؟

🔵سرعت: توی پست‌های X گفته شده که تست‌های اولیه نشون می‌ده این نسخه تا 10 برابر سریع‌تر از نسخه الان کار می‌کنه. مثلاً توی پروژه‌های بزرگ مثل VS Code که از سرور تایپ‌اسکریپت (tsserver) زیاد استفاده می‌کنه، این سرعت می‌تونه کار رو خیلی راحت‌تر کنه.

🔵کارایی: Go یه زبان کامپایل‌شده‌ست و خیلی بهینه‌تر از جاوااسکریپت اجرا می‌شه، مخصوصاً برای کارای سنگین مثل بررسی نوع‌ها توی پروژه‌های بزرگ.

چیا قراره عوض بشه ؟

🔵پرفورمنس بهتر : اگه این 10 برابر سریع‌تر بودن واقعی باشه، برای پروژه‌های بزرگ که الان بررسی نوع‌هاشون گاهی چند ثانیه یا حتی چند دقیقه طول می‌کشه، یه تغییر بزرگه.

🔵سرور سریع‌تر: چون VS Code و خیلی از ویرایشگرها از tsserver برای تحلیل کد استفاده می‌کنن، این می‌تونه تجربه برنامه‌نویسی رو خیلی بهتر کنه.

هنوز معلوم نیست این تغییر به Go روی خود زبان (مثل دستورات یا ویژگی‌ها) اثر می‌ذاره یا فقط کمپایلر رو عوض می‌کنه 🏖️

#typescript #go #news
@CodeModule
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from FullstacksJS — Academy
ریویو پروژه NextJS
توی این جلسه یک پروژه تو این جلسه یک پروژه NextJS رو با هم ریویو می‌کنیم.

مشاهده ویدئو

درباره ماب ریویو:
ماب ریویو یه رویداد دوستانه و خودمونی برای انتقال تجربه دانشه.
توی این رویداد دور هم جمع می‌شیم تا یک سورس کد رو با هم ریویو کنیم و درباره پرکتیس‌های بهتر و دلایلش صحبت کنیم.

مباحث:
00:00 درباره ماب ریویو
01:30 خواهش دومم
02:40 درباره پروژه
03:37 وابستگی ها
05:33 مسئله Dead Code و Zombie Code ها
10:10 سلامتی وابستگی ها
11:46 کدهایی که مردن رو پاک کنید!
15:22 چطوری یک خط خالی توی کد روی استخدام شدن شما تاثیر می‌ذاره؟
31:30 اضافه کردن فرمتر و لینتر
33:03 از public چیزی ایمپورت نکنید
34:47 کی و چطوری باید کامپوننتمون رو بشکنیم؟
42:35 مسئله useless fragment
43:51 یکپارچگی پیاده سازی و اسم گذاری
45:15 مسئله layout
48:04 مسئله اسم گذاری
53:46 بررسی کامپوننت Banner
55:11 چرا نباید از z-index و overflow زیاد استفاده کنید
55:54 تعداد خط‌های کامپوننت Code Smell حساب می‌شه.
57:42 نحوده درست مدیریت z-index
59:51 اصل Single Responsibility تو فرانت اند
01:02:52 چه چیزهایی رو نباید توی کامپوننت برد؟
1:08:55 درک مسئله Spacing
1:11:07 پیاده سازی درست تم dark و light با taildinw
1:16:23 انکپسوله کردن مسئولیت های کامپوننت ها
1:20:07 کی از margin استفاده کنیم کی از padding
1:22:00 از grid و flex تو در تو استفاده نکنید.
1:27:34 به CSS فحش ندیم
1:28:32 فرق بین space و gap توی tailwind
1:30:25 جمع بندی

#fullstacksjs #mobreview #css #react #typescript #nextjs
Forwarded from 🎄 یک برنامه نویس تنبل (  MΞ)
Forwarded from 🎄 یک برنامه نویس تنبل (  MΞ)
🔶 #Typescript OOP

وقتی میتونید از this داخل استاتیک متدها استفاده کنید که متدی که کال میکنید هم استاتیک باشه

when calling a static method inside another static method, you must reference it using this or the class name itself

class HTTPClient {
static request(url: string, method: string = 'GET'): void {
console.log(`Requesting ${url} with method ${method}`);
}

static fetchData(url: string): void {
// Calling the static method using "this"
this.request(url, 'GET');

// Calling the static method using the class name
HTTPClient.request(url, 'POST');
}
}

// Usage
HTTPClient.fetchData('https://api.example.com/data');


#tips

@TheRaymondDev
Forwarded from Ditty | دیتی
آرایه با عضو اجباری توی تایپ‌اسکریپت؟ 🤔

برای مثال چکار کنیم وقتی می‌خوایم یک تایپ برای یک آرایه داشته باشیم که:

۱. اعضای اون عددی باشن
۲. می‌خوایم کاربر رو مجبور کنیم که حتماً این آرایه رو خالی نذاره

از ترفند خط ۶ عکس استفاده می‌کنیم 👌

#typescript
Forwarded from 🎄 یک برنامه نویس تنبل (  MΞ)
nestjs.zip
550.9 KB
میخواستم بیشتر nestjs یاد بگیرم ولی خب با این وضعیت نت نمیشد
بخش زیادی از داکیومنت nestjs رو بصورت markdown ذخیره کردم که میتونید راحت استفاده کنید
بخش sample گیتهاب نست که مثالاشو گذاشته هم اوردم تنها کاری که باید بکنید دپندنسی هارو اینستال کنید که اگه نت هم نداشتید بشه یاد گرفت

#nestjs #typescript

@TheRaymondDev
‏از خوبی های ‎#TypeScript همین بس که اگه تازه واردش شدی و حس کردی با ارور های مکرر داره این پیام رو القا میکنه که چقدر برنامه نویس بیشعوری هستی، بدون که قبلشم همینقدر بیشعور بودی منتهی کسی به روت نمیاورده. :))

<ali Azizjahan/>

@DevTwitter
Forwarded from Code Lab (𝘮𝘰𝘯𝘪𝘣 𝘴𝘢𝘭𝘦𝘩𝘪)
🔥 تفاوت جاوااسکریپت و تایپ‌اسکریپت

جاوااسکریپت یه زبان Dynamic هست یعنی تایپ داده‌ها رو موقع اجرا مشخص می‌کنه و این باعث میشه گاهی با خطاهای عجیب روبرو بشی
تایپ‌اسکریپت اومده تا این مشکل رو حل کنه و به جاوااسکریپت قدرت Static Typing بده یعنی از همون اول تایپ متغیرها رو مشخص کنی و قبل از اجرا خطاها رو ببینی
در واقع تایپ‌اسکریپت مثل یه لایه امن روی جاوااسکریپت عمل می‌کنه و کدتو تمیزتر و قابل پیش‌بینی‌تر می‌کنه
یه نکته مهم بدون تایپ‌اسکریپت تبدیل به جاوااسکریپت میشه پس برای اجرا همیشه به JS برمی‌گرده

#TypeScript #JavaScript

CODELAB | GpCodeLab
Forwarded from Gopher Academy
🔵 عنوان مقاله
be experimenting with

🟢 خلاصه مقاله:
از کتابخانه‌های زیادی که می‌خواهند به مخاطبان بیشتری برسند، در حال حاضر نسخه‌های JavaScript ارائه می‌شود تا هم در مرورگر و هم در محیط‌های Node.js، Deno و Bun در دسترس باشند. مزیت اصلی، دسترسی گسترده، توزیع ساده از طریق npm و تجربه کاربری یکپارچه بین فرانت‌اند و بک‌اند است.

دو مسیر رایج وجود دارد: بازنویسی بومی با TypeScript برای ارائه APIهای استاندارد، تایپ‌های دقیق و قابلیت tree-shaking؛ یا پورت از زبان‌های سطح پایین به WebAssembly برای حفظ کارایی و استفاده مجدد از کد موجود. ابزارهایی مانند Emscripten، wasm-bindgen و ابزارهای Go این کار را تسهیل می‌کنند و با ارائه TypeScript declarations سطح استفاده‌پسند ایجاد می‌شود.

چالش‌ها شامل انتخاب بین ESM و CJS، بهینه‌سازی اندازه باندل و دارایی‌های WASM، محدودیت‌های مرورگر (فایل‌سیستم و سوکت خام)، تفاوت‌های اجرا در Node.js/Deno/Bun، و مدیریت کارایی و زمان راه‌اندازی است. استفاده از Web Workers، بارگذاری تدریجی، بنچمارک‌گیری در محیط‌های مختلف و مستندسازی دقیق کمک‌کننده است. در حوزه امنیت نیز باید مراقب زنجیره تأمین، نسخه‌بندی SemVer، تست و انتشار مرحله‌ای بود.

نمونه‌های موفق شامل OpenCV.js، نسخه WASM از SQLite، TensorFlow.js، ONNX Runtime Web و Pyodide است که نشان می‌دهند با طراحی API مناسب و ابزار درست، پورت‌های جدی عملی است. قاعده تصمیم‌گیری: اگر کتابخانه سنگین و بهینه است، WASM انتخاب خوبی است؛ اگر هدف تجربه توسعه‌دهنده در اکوسیستم JavaScript است، بازنویسی با TypeScript بهتر است؛ و برای قابلیت‌های سخت‌افزاری/سیستمی، رویکرد هیبریدی یا سمت سرور منطقی است. با پیشرفت WebAssembly/WASI، WebGPU و پلتفرم‌های edge مانند Cloudflare Workers و Vercel Edge، زمان مناسبی برای آزمایش و تکرار است.

#JavaScript #WebAssembly #TypeScript #NodeJS #Deno #npm #OpenSource

🟣لینک مقاله:
https://golangweekly.com/link/175359/web


👑 @gopher_academy
Forwarded from DevAcademy
📌برای کسایی که نتونستن شرکت کنن

🚀 سورس‌کد و منابع ارائه‌های ایونت اخیرمون منتشر شد!

توی این ایونت دو ارائه‌ی فوق‌العاده داشتیم که حالا می‌تونید به راحتی سراغ کدها و مثال‌هاش برید 👇

💬 ارائه‌ی آقای سالار نیلی درباره‌ی TypeScript
در این ارائه به مفاهیم پایه تا نکات پیشرفته‌ی TypeScript پرداخته شد و مثال‌های عملی جذابی بررسی شدن.
📦 سورس‌کد و اسلایدها در گیت‌هاب:
🔗 github.com/codehalic/workshop-typescript-presentation

⚙️ ارائه‌ی پوریا باباعلی درباره‌ی Flux Pattern
توی این ارائه معماری Flux و نحوه‌ی استفاده از اون در پروژه‌های React مورد بحث قرار گرفت.
📦 سورس‌کد و نمونه‌کدهای ارائه در گیت‌هاب:
🔗 github.com/codehalic/workshop-flux-pattern-presentation

📚 پیشنهاد می‌کنیم حتماً سری به این ریپوها بزنید، کدها رو بررسی کنید و اگر سوالی داشتید با ما در میون بذارید 🙌

#TypeScript #Flux #Workshop #Codehalic #Frontend #WebDev


@codehalics
🚀 سورس‌کد و منابع ارائه‌های ایونت اخیرمون منتشر شد!

توی این ایونت دو ارائه‌ی فوق‌العاده داشتیم که حالا می‌تونید به راحتی سراغ کدها و مثال‌هاش برید 👇

💬 ارائه‌ی آقای سالار نیلی درباره‌ی TypeScript
در این ارائه به مفاهیم پایه تا نکات پیشرفته‌ی TypeScript پرداخته شد و مثال‌های عملی جذابی بررسی شدن.
📦 سورس‌کد و اسلایدها در گیت‌هاب:
🔗 github.com/codehalic/workshop-typescript-presentation

⚙️ ارائه‌ی پوریا باباعلی درباره‌ی Flux Pattern
توی این ارائه معماری Flux و نحوه‌ی استفاده از اون در پروژه‌های React مورد بحث قرار گرفت.
📦 سورس‌کد و نمونه‌کدهای ارائه در گیت‌هاب:
🔗 github.com/codehalic/workshop-flux-pattern-presentation

📚 پیشنهاد می‌کنیم حتماً سری به این ریپوها بزنید، کدها رو بررسی کنید و اگر سوالی داشتید با ما در میون بذارید 🙌

#TypeScript #Flux #Workshop #Codehalic #Frontend #WebDev


@codehalics