Sau khi tham gia những hội nghị và đọc những bài đăng trên blog nơi TypeScript là quả bóng, chúng tôi quyết định hành động rằng nó phải đáng được xem xét tráng lệ. Những thứ như sự tự tin trong việc tái cấu trúc, sự thuận tiện của nhà tăng trưởng với những tính năng như tự động hóa hoàn thành xong và tích hợp với GraphQL để tự động hóa tạo những loại dựa trên những lược đồ API nội bộ của chúng tôi nghe có vẻ như như những quyền lợi xứng danh với mỡ thừa. Quyết định thử nghiệm nó như một dẫn chứng về khái niệm nhanh gọn được tăng trưởng thành một dự án Bất Động Sản đổi khác cách tôi nhìn nhận mã của chính mình và của những người khác, và giờ đây tôi sẽ không quay lại .
Tại Udacity, chúng tôi đã sử dụng React trong sản xuất hơn 5 năm. Xem xét React đã đi được bao xa trong thời hạn đó, không có gì kinh ngạc khi tổng thể tất cả chúng ta còn lại một lượng đáng kể mã React thừa kế. Tuy nhiên, điều quan trọng so với chúng tôi là phải giữ mọi thứ theo tiêu chuẩn tốt nhất hiện tại, cho nên vì thế, khi đến lúc quyết định hành động hành vi về khoản nợ công nghệ tiên tiến tiên tiến và phát triển có tác động ảnh hưởng ảnh hưởng tác động cao nhất cần giải quyết và xử lý, TypeScript Open ở phía trước và ở giữa. Một số thành viên trong nhóm ( gồm có cả tôi ) không tin rằng quy đổi sang TypeScript sẽ có lợi như vậy. Nghĩ về hàng nghìn dòng mã trải dài trên hàng trăm tệp giữa những thành phần, dịch vụ, chủ trương xem, bộ giảm, bộ chọn, trình trợ giúp và thử nghiệm, có vẻ như như như nó sẽ không đáng giá. Chúng ta trọn vẹn hoàn toàn có thể nhận được những quyền hạn tựa như chỉ bằng cách đáp ứng khoanh vùng khoanh vùng phạm vi kiểm tra tốt hơn không ? Sau khi tham gia những hội nghị và đọc những bài đăng trên blog nơi TypeScript là quả bóng, chúng tôi quyết định hành động hành vi rằng nó phải đáng được xem xét trang trọng. Những thứ như sự tự tin trong việc tái cấu trúc, sự thuận tiện của nhà tăng trưởng với những tính năng như tự động hóa triển khai xong xong và tích hợp với GraphQL để tự động hóa tạo những loại dựa trên những lược đồ API nội bộ của chúng tôi nghe có vẻ như như như những quyền lợi và nghĩa vụ xứng danh với mỡ thừa. Quyết định thử nghiệm nó như một dẫn chứng về khái niệm nhanh gọn được tăng trưởng thành một dự án Bất Động Sản Bất Động Sản Nhà Đất đổi khác cách tôi nhìn nhận mã của chính mình và của những người khác, và giờ đây tôi sẽ không quay lại .
Chuyển đổi một ứng dụng từ JavaScript cũ tốt sang TypeScript không phải là một kỳ công nhỏ và tôi đã học được rất nhiều điều trong suốt quá trình. Bài đăng này không nhằm thuyết phục bạn thực hiện chuyển đổi, cũng không phải là hướng dẫn cách viết của bạn tsconfig
– đã có rất nhiều tài nguyên ngoài kia khai thác các ưu điểm của việc nhập tĩnh và chỉ cho bạn cách khởi động và chạy trình biên dịch của mình. Thay vào đó, những gì tôi hy vọng chia sẻ là một số bài học tôi đã học được trong quá trình di chuyển 8 tháng đã đưa ứng dụng của tôi từ con số 0 đến khi được nhập hoàn chỉnh, điều đó có thể giúp con đường của bạn dễ dàng hơn một chút nếu bạn đang dự định bắt đầu. Hãy coi đây không phải là một hướng dẫn từng bước mà còn là tổng quan về một số bẫy khiến việc di chuyển trở nên khó khăn. Một số trong số này là những cái hố mà tôi đã phải tự đào, vì vậy hãy tự cứu lấy rắc rối và đọc tiếp!
Bạn đang đọc : Cái nhìn của con chim về việc chuyển một ứng dụng React sang TypeScript
Nội dung bài viết
Tôi và Ngăn xếp Front-end của tôi
Trước khi tất cả chúng ta khởi đầu, tôi muốn trình làng nhanh về tôi và ứng dụng của tôi, để bạn hoàn toàn có thể xác lập những điểm tương đương và độc lạ giữa những gì tôi sẽ nói và trường hợp đặc biệt quan trọng của bạn .
Tôi mở màn quy trình này chỉ với một chút ít kinh nghiệm tay nghề với TypeScript – tôi biết nó là gì ở mức cơ bản. Tôi hoàn toàn có thể viết một loại, nhưng tôi không thực sự biết về những thứ như thuốc chung. Ứng dụng mà tôi thao tác là một bảng điều khiển và tinh chỉnh được kiến thiết xây dựng bằng React + Redux với sự tích hợp của những điểm cuối API GraphQL và REST. Nó sử dụng Reselect để tạo những bộ chọn đã ghi nhớ từ Redux store và sử dụng React-Router để hiển thị những chính sách xem dựa trên trạng thái URL. Tính đến thời gian viết bài, nó gồm có hơn 100.000 dòng mã. Khi khởi đầu dự án Bất Động Sản này, nó đa phần sử dụng những thành phần dựa trên lớp. Cuối cùng, tôi đã uống hết Kool-Aid, nhưng tất cả chúng ta sẽ đạt được điều đó sau một giây .
Bài học số 0— Bắt đầu nhỏ nhưng nghiêm ngặt
Khi bạn lần đầu tiên tsconfig
thiết lập và quyết định bắt đầu từ đâu, hãy tìm một tệp tương đối nhỏ với ít hoặc không có tệp nhập. Một tệp trợ giúp có thể hoàn hảo cho việc này. Trong lần thay đổi đầu tiên, về cơ bản bạn chỉ cần xác thực rằng ứng dụng của bạn sẽ hoạt động với một .ts
tệp thay cho .js
tệp. Hãy tự mình thực hiện một cách dễ dàng và thực hiện một điều gì đó có thể không khiến bạn đau đầu.
Ngoài ra, hãy nghiêm khắc. Đừng cho phép mình đi đường tắt ở đây. Thật hấp dẫn khi nói “Ồ, tôi sẽ chỉ nhập nó như any
bây giờ và tôi sẽ quay lại sau khi tôi tìm ra điều này.” Thành thật mà nói, bạn sẽ không quay trở lại. Sau này, bạn sẽ không cập nhật tsconfig
quy tắc đó thành một giá trị chặt chẽ hơn và quay lại mọi tệp mà nó bị hỏng. Hãy thiết lập và thực hiện nó ngay từ đầu.
Bài học số 1 – Nhập những thứ bạn nhập đầu tiên
Chuyển đổi tệp không có hoặc ít lần nhập trước bất kể thứ gì khác. Thay vào đó, nếu bạn quy đổi tệp đang nhập tệp JavaScipt cục bộ, thì trọn vẹn hoàn toàn có thể xảy ra trường hợp sau này quy đổi tệp đã nhập đó sang TypeScript, sẽ có những lỗi loại mới mà bạn sẽ phải theo dõi trong những tệp mà bạn không có ‘ t đang thao tác .
Cố gắng càng nhiều càng tốt để quy đổi những tệp bạn nhập trước và chỉ sau khi bạn triển khai xong việc đó, hãy quy đổi những tệp nhập chúng. Điều này có nghĩa là những ứng viên tốt để mở màn là những dịch vụ, người trợ giúp và những thành phần được san sẻ đơn thuần .
Bài học # 1.5 – Cùng theo dõi với một khóa học trực tuyến
Udacity là một nền tảng giáo dục trực tuyến, vì thế, mặc dầu chúng tôi chưa có khóa học cụ thể về TypeScript ( ! ), Nhưng chúng tôi vẫn nhận ra rằng chúng tôi được trao quyền như thế nào để học những kỹ năng và kiến thức sử dụng những tài nguyên trực tuyến .
Nếu bạn đã có nhiều kinh nghiệm tay nghề với TypeScript, vui mừng bỏ lỡ bước này. Tuy nhiên, nếu bạn giống như tôi, bạn hoàn toàn có thể cảm thấy như mình đang được hướng dẫn đúng hướng, nhưng việc tiến lên phía trước sẽ làm lộ ra những lỗ hổng trong kiến thức của bạn. Sau khi quy đổi một vài tệp đơn thuần, tôi mở màn hiểu những loại yếu tố mà tôi sẽ gặp phải. Tôi đã có sẵn những câu hỏi và đã nhận ra những khu vực trong mã của mình nơi những yếu tố nhất định sẽ xảy ra. Tham gia vào một khóa học vào thời gian này trong hành trình dài của tôi rất có ích vì tôi đã học được những khái niệm nâng cao và hoàn toàn có thể vận dụng ngay lập tức những gì tôi vừa học vào mã của mình .
Bài học # 2 – Tự động tạo các kiểu từ GraphQL
Tôi đã mắc sai lầm khi bắt đầu nhập câu trả lời từ các API của chúng tôi mà không xem xét các công cụ cung cấp loại cho tôi trước. Nếu bạn có thể, hãy sử dụng chúng ngay từ đầu! Đối với GraphQL, bây giờ chúng tôi sử dụng graphql-codegen
để kiểm tra máy chủ của mình và cung cấp các loại TypeScript cập nhật cho tất cả dữ liệu trong lược đồ của chúng tôi. Nó cũng kiểm tra các truy vấn mà chúng tôi có trong .gql
các tệp và cung cấp các loại cho các biến và các loại trả về của mỗi truy vấn và đột biến. Chỉ cần nói rằng, không phải bảo trì những thứ này bằng tay chắc chắn là điều bạn muốn, vì vậy hãy thiết lập sớm. Thực hiện việc này cùng lúc hoặc trước khi bạn chuyển đổi các hành động và lệnh gọi API của mình sang TypeScript.
Bài học # 3 – Làm cho Cửa hàng Redux và Bộ chọn của bạn có hình dạng
Cùng với ý tưởng “nhập những thứ bạn nhập trước”, cửa hàng Redux có thể là một loại rất quan trọng cần được xác định sớm. Loại này có thể được suy ra từ các bộ giảm của bạn, thực hiện các hành động của bạn. Họ phải đồng ý tất cả, vì vậy việc đánh máy chắc chắn này sẽ giúp bạn thành công. Các khóa học nói trên về Egghead rất hữu ích trong bước này, khi tôi đã tìm hiểu về ReturnType
tiện ích này.
Khi bộ giảm giá và shop của bạn đã được thiết lập xong, tiếp theo là bộ chọn của bạn. Sử dụng Reselect cho việc này là một cách tuyệt vời để chuẩn hóa những bộ chọn của bạn, ghi nhớ chúng theo mặc định và được cho phép bạn phối hợp nhiều bộ chọn với nhau để có được những gì bạn cần từ shop. Bộ chọn cũng cực kỳ có ích trong những thành phần của bạn để nhập tài liệu đến từ shop của bạn khi bạn sử dụng hook .
Điều đó đưa tôi đến …
Bài học số 4 – Ôm móc
Tại thời điểm này, về cơ bản bạn đã làm lại tất cả các đường ống dẫn nước, nhưng chưa chạm nhiều đến JSX. Bắt đầu chuyển đổi các Thành phần React là một bước thú vị đối với tôi, điều này nhanh chóng chuyển thành việc kéo tóc tôi ra khi tôi cố gắng giữ những thứ ban đầu là dựa trên lớp, dựa trên lớp. Trong một thành phần điển hình, tôi sẽ phải viết một kiểu cho mapStateToProps
đạo cụ, mapDispatchToProps
đạo cụ, đôi khi là mergeProps
đạo cụ, đạo cụ riêng của thành phần mà nó sẽ nhận từ cha mẹ của nó hoặc HOC khác, cũng như một State
kiểu nếu thành phần có bất kỳ trạng thái bên trong nào .
Bạn hoàn toàn có thể làm toàn bộ những điều này. Hoặc, bạn hoàn toàn có thể tránh va chạm nhiều lần của khuôn mặt với bàn thao tác và chỉ cần sử dụng một bộ phận tính năng và móc .
Mặc dù đây không hoàn toàn là một khuyến nghị của TypeScript, nhưng việc chuyển đổi sang một thành phần chức năng có hook đã đơn giản hóa đáng kể quá trình di chuyển. Trên hết, nó cho thấy rằng connect
hàm đôi khi ánh xạ trạng thái nhất định với các đạo cụ một cách không cần thiết bằng cách bao gồm một giá đỡ chưa bao giờ được sử dụng trong thành phần. Bằng cách sử dụng hook, các biến không sử dụng sẽ bị loại bỏ bởi linter và bằng cách gõ các bộ chọn, việc xác định một biến đã nhập đơn giản như
const nanodegrees = useSelector(nanodegreesSelector);
Bài học số 5 – Giữ vững
Thành thật mà nói, đôi lúc việc biến hóa phần lan rộng ra tệp, sau đó vô hiệu hàng loạt những lỗi biên dịch sẽ lặp đi lặp lại. Có lẽ tôi là duy nhất trong việc này, nhưng việc tái cấu trúc là một niềm vui so với tôi và mỗi tệp tôi đã quy đổi là phần thưởng của riêng nó. Nếu bạn là kiểu người cần được khuyến khích nhiều hơn, một vài kế hoạch tôi đã sử dụng là :
- Đảm bảo rằng mọi tính năng mới đều được viết bằng TypeScript.
- Nếu một tệp được chạm để sửa lỗi khác, hãy xem xét chuyển đổi tệp đó.
- Nếu bạn không biết phải chuyển đổi gì tiếp theo (khi bạn đã hài lòng với bài học số 1), hãy tìm kiếm từ khóa
export
trong bất kỳ.js
hoặc.jsx
tệp nào và chỉ cần đi từ trên cùng. - Tìm phần thưởng của bạn khi xem tỷ lệ phần trăm tệp TypeScript tăng lên sau mỗi lần PR.
Bạn đã trải qua quy trình tiến độ này trong dự án Bất Động Sản Bất Động Sản Nhà Đất của riêng mình chưa ? Những thử thách nào bạn đã đương đầu trọn vẹn hoàn toàn có thể giúp sẵn sàng chuẩn bị chuẩn bị sẵn sàng cho những fan hâm mộ quả cảm khác ? Thêm vào những nhận xét với bất kể mẹo nào đã giúp bạn trong suốt quy trình tiến độ. Ngoài ra, nếu bạn chăm nom đến việc làm việc trên một React stack văn minh tại một công ty số 1 về giáo dục cho sự nghiệp của tương lai, Udacity đang tuyển dụng !
Source: https://swing.com.vn
Category: Wiki