Tại sao TS không bắt lỗi?

image
chào các Bạn , mình đang test thử tính năng bắt lỗi của JSDOC, ở dòng 12, mình truyền object không giống với khai báo của JSDOC, vậy tại sao TS nó không nhận ra và thông báo lỗi cho mình ạ?

Râu ông nọ cắm cằm bà kia.

Keep in mind that when using JSDoc for TypeScript code, you should not include type annotations. The TypeScript compiler only uses TypeScript type annotations and ignores those from JSDoc.

Typescript có khai báo kiểu dữ liệu đầu vào.

function doSomething(param: any) : any {
} 
5 Likes

Bạn đang có 1 sự hiểu mập mờ giữa typescript và javascript:

  • Thứ nhất, câu đó rất rõ ràng: Type khai báo trong JSDoc sẽ bị bỏ qua, và Typescript sẽ sử dụng type khai báo trong param của method để báo lỗi. Khi bạn không khai báo type, thì mặc định nó sẽ là any. Nên không hề có lỗi gì xảy ra
  • Thứ hai, bạn biết về file d.ts chưa?
  • Thứ ba, cách viết của bạn là javascript nhưng extension lại là ts. Compiler sẽ tự động nhận diện đó là typescript, bỏ qua mấy cái khai báo type trong jsDoc của bạn.

Và mình nhắc lại: Type script có type anotation khi khai báo method thay vì phải dùng @param
VD

// js
/**
* @param {string} a
*/
function doA(a) {
}

// ts
/**
* @param a
*/
function doA(a: string) {

}

Keep in mind that when using JSDoc for TypeScript code, you should not include type annotations. The TypeScript compiler only uses TypeScript type annotations and ignores those from JSDoc.

Câu này bạn tham khảo tại https://code.visualstudio.com/docs/languages/typescript

7 Likes

Nó rất liên quan là đằng khác đó bạn. Bạn trên comments rất chi tiết và đầy đủ nội dung lẫn thắc mắc của bạn. Mình tóm gọn lại cho bạn như sau. Typescript sử dụng khai báo kiểu dữ liệu (Type) tĩnh ngay bên trong khai báo function tương tự như cú pháp của Swift. Nếu đã từng học ít nhất 1 ngôn ngữ lập trình kiểu tĩnh sẽ thấy rất quen thuộc.
Cách khai báo kiểu bằng cú pháp JSdoc (@type, @param…) Là dùng cho JavaScript, typescript không quan tâm cách khai báo đấy. (Nội dung trích dẫn bằng tiếng Anh cũng đã nhắc đến rất dễ hiểu)
PS: tôi không hiểu sao có người có thể like mấy câu trả lời của bạn @Kenneth_Hoang được, nick clone chăng

6 Likes

Tại sao phải làm bắt lỗi tham số với jsdoc mà ko phải là check khai báo type với typescripts, ko hiểu bạn thích làm phức tạp hóa vđề nên làm j, mục đích của bạn là j ?

1 Like



đây em đang học trên trang này đây, theo ảnh thì typescript của vs-code sẽ bắt lỗi.
em code trên máy em nó không bắt lỗi thì em thắc mắc thôi

Học hành không đến nơi đến chốn khổ thế đấy. Lại còn thêm tính tự ái cao vời vợi, không chịu chắt lọc thông tin hữu ích nhưng lại rất thích khịa lại người khác. Thôi thì trót làm người tốt trong topic này thì mình làm đến cùng vậy.
Sở dĩ người ta cần đến JSDoc vì đó là dùng trong javascript, ngay tên JSDoc cũng gợi ý nơi mà nó sẽ được sử dụng, file extension của JavaScript là .js còn ở đây bạn code trong file với đuôi là .ts, VScode sẽ hiểu bạn đang code bằng Typescipt (chưa biết Typescript là gì và nó khác gì JavaScript thì vui lòng google thêm, tiếng Việt/tiếng Anh có rất nhiều) nên sẽ bỏ qua khai báo typing trong JSDoc mà sử dụng typing system của TypeScript (chi tiết cũng google luôn về syntax của TypeScript cũng như dùng google dịch để hiểu câu trích dẫn của bạn đầu tiên comment)

6 Likes

Nó không phải vì 1-2 cái like để mà chấp nhặt làm gì vì hàng ngày tôi vẫn có thể nhận được nhiều like cho các comment giúp đỡ các bạn khác. Cái tôi thắc mắc là tại sao câu trả lời có phần hơi xúc phạm bạn @LocNguyenXuan99 trong khi bạn ý đang cố giúp bạn nhưng vẫn có người có thể like được. Đó chính là vấn đề

4 Likes

Có lẽ bạn chưa hiểu các khái niệm lắm
Trong jsdoc

phần đứng trong cặp ‘{}’ sau @ param gọi là type annotation nó cho biết config có type gì.
Vd

@param {string} name
@param {number} age

Trong ví dụ của bạn config được khai báo là 1 object có 1 property là shouldRun.
gọi là object literal types

Cách này chỉ đúng trong trường hợp sử dụng cho javascript. Còn typescript nó sẽ bỏ qua type annotation của jsdoc. Thay vào đó nó sẽ check type bằng type annotation của typescript

File của bạn để định dạng là ts, nên nó sẽ check theo cú pháp của ts, bỏ qua khai báo trong jsdoc.

Kết luận

  • Jsdoc chỉ work với javascript, còn typescript thì có 1 cú pháp khác.
  • TS có thể đọc được code javascript khi đó toàn bộ param, method, function, object của js khi sử dụng mặc định có kiểu any, cần thêm 1 bước để TS có thể kiểm tra và check kiểu dữ liệu đó là generate ra file d.ts
  • Trong vd của bạn, người ta muốn dùng ts-check để bắt lỗi trong file javascript chứ không phải dùng jsdoc để bắt lỗi trong typescript.
8 Likes

[Off topic]
@anon35998660
Bình thường, tớ sẽ gửi tin nhắn riêng cho cậu, để đưa ra một số lời góp ý, chủ yếu để giữ thể diện cho cậu, cơ mà có vẻ như nó sẽ không có ích trong TH này. Thế nên, tớ sẽ nhắc nhở cậu một cách công khai trên topic này.
Tớ không thích cách cậu trả lời người khác như thế này:

Cậu hoàn toàn có thể nhẹ nhàng nhờ người đang giúp đỡ mình giải thích rõ ràng hơn, phải không?

Cậu đâu nhất thiết phải reply lại comment đó, vốn không hỏi về cậu? Mặt khác, sao cậu không thử hỏi @qloved mình có làm gì sai, để tự cải thiện?

[Off-topic] Nào, tớ có mấy câu hỏi dành cho cậu:

  • Cậu, @edward_benjamin@anon14394188 (thậm chí cả @anon86932447) có phải là một tài khoản không?
    Tớ thấy cả 3 đều:
    • Chỉ biết javascripts và các thứ liên quan tới công nghệ này ở mức surface
    • Có xu hướng thích trả lời các comment không liên quan
    • Có xu hướng thích công kích cá nhân khi ai đó nói gì hơi không tốt về mình
    • Gần đây, có xu hướng viết một thứ gì đó rất tệ, rồi xóa nó đi.
    • Thích để avatar con gái, và thích trêu các bạn gái (với TH của @anon14394188@anon86932447)
    • Không bao giờ, hoặc rất ít khi cảm ơn ai đó đã giúp mình
    • Cũng không bao giờ xin lỗi bất cứ ai, hay thừa nhận sai lầm. Chỉ đơn giản là ignore nó đi thôi.
    • Không bao giờ, hoặc rất ít khi mark solution một topic
    • Có xu hướng thích hỏi các câu hỏi Subjective
    • Có xu hướng trả lời rất hời hợt khi reply một topic nào đó khác
    • Có xu hướng hỏi ké ở các topic khác
  • Cậu thích thảo luận về js, hay cậu thích thảo luận những thứ không liên quan ở topic này?
    Nếu cậu chỉ thích comment trả lời những thứ không liên quan tới thứ mà cậu cần câu trả lời, nói với tớ điều đó, hoặc cậu có thể tiếp tục làm điều đó ở đây. Tớ sẽ để tất cả các topic thảo luận về TS vào off-topic, rename topic này là “góc cãi nhau của @anon35998660”, và để cậu ở đây tự thảo luận những chủ đề mà cậu hứng thú. Tất cả các topic khác của cậu trong tương lai sẽ bị đối xử tương tự.
    Cậu muốn thế chứ?
  • Tại sao cậu ở diễn đàn này? Để thể hiện cái tôi, tự ái của cậu, hay để học hỏi?

Nếu như các account trên là một người, thì tớ còn hi vọng. Nếu các account trên thuộc về vài người khác nhau, thì cả thế hệ kỹ sư VN mới này vứt vào sọt rác rồi! Khi đó, tớ không còn bất cứ hi vọng gì về việc cải thiện các lớp kỹ sư mới khi trả lời trên diễn đàn này.

Nếu như cậu đã hiểu điều mà @LocNguyenXuan99@qloved đã giải thích về vấn đề TS của cậu, cậu nên cảm ơn họ đã giúp đỡ cậu. Ít nhất, show tớ một chút hi vọng là cậu muốn ở đây để học hỏi.

10 Likes

[Off-topic]

Uhm, thực ra cậu không đủ logic để tranh luận với người khác. Và thứ cậu đang làm cũng chẳng phải tranh luận. Tranh luận khác với cãi lộn ở “logic”.

Có sự khác biệt lớn giữa “thắc mắc”, “hỏi để cho hiểu” với việc “ra lệnh”, “chỉ trích” và bàn về những thứ không liên quan tới chủ đề của cậu, những thứ mà tớ đã trích dẫn ở topic trước.
Cậu mới là người đang đánh tráo khái niệm. Việc “trao đổi” mà cậu đang cố lái sang, thực ra thể hiện cho sự thiếu giáo dục, thiếu tử tế của cậu thôi.

Oh, sự thông minh của cậu đôi khi làm tớ ngạc nhiên. Bọn tớ không phải giảng viên :smile:
Ngoài ra, tớ cũng thắc mắc, học sinh như cậu có bao giờ lịch sự hỏi giảng viên không nhỉ? Có bao giờ nói với giảng viên “nói tiếng việt đi, em chẳng hiểu gì cả”.

Như tớ đã đề cập ở trên, tớ sẽ re-purpose topic này thành góc tranh cãi của cậu.
Cậu không có nổi phép lịch sự tối thiểu, khi không cảm ơn nổi 2 người đã giúp đỡ cậu nhiệt tình.
Cậu cũng không có nổi dũng cảm để thừa nhận sự kém cỏi và sai lầm của bản thân, và từ đó phấn đấu + học hỏi.
Cậu cũng không có đủ kiên nhẫn, không có đủ sự lắng nghe, không có đủ kiến thức.
Tất cả những gì cậu có chỉ là cái tôi khổng lồ, thứ sẽ giúp cậu tự đào hố chôn cậu. Sớm thôi, cậu sẽ nhận ra, không ai muốn nói chuyện gì thêm với người như cậu, cũng không ai muốn hợp tác với cậu trong bất cứ tình huống nào, kể cả ở đây lẫn ở ngoài cuộc sống.

Ở đây mà tự cãi nhau một mình đi.

13 Likes

ông này làm tôi nhớ lại 1 ông vào công ty tôi thử việc vị trí frontend. Lead hay PM nói k nghe, cái tôi cực cao -> k hiểu rõ được giữa việc tranh luận và cãi lộn khác nhau như nào -> cãi tất, k cãi được thì lại kiểu “được rồi, ok a thích thì e làm theo ý a”. Kết quả là thử việc từ 2 tháng -> 3 tháng thử việc, thử việc xong k pass lên chính thức và rời khỏi công ty :smiley:

3 Likes

Có người từng khuyên bạn này nghỉ làm dev đi

Một năm trôi qua mà có vẻ kiến thức của bạn này hổng nhiều quá, âu cũng là do cái tính kiêu ngạo không chịu nhận sai để học hỏi.
Xem qua mấy topic của bạn này thì

  • Học theo cách copy code trên mấy bài hướng dẫn trên mạng về chạy thử. Phương pháp học nhảy cóc thiếu hệ thống, thiếu nền tảng.
  • Đem nguyên lý thuyết của 1 ngôn ngữ, công nghệ này qua áp dụng máy móc cho ngôn ngữ, công nghệ khác.
  • Kiến thức cơ bản còn chưa nắm vững.
9 Likes

To @anon35998660 và tất cả các nick phái sinh khác,

Sau đây nếu bạn có bất kỳ hành vi toxic, nghiêm trọng hơn là phá hoại diễn đàn, tất cả các nick phái sinh của bạn cùng với tất cả các bằng chứng vi phạm của bạn trước đây sẽ được đưa ra công khai để có hình phạt thích đáng.

Đây là lời nhắc nhở cuối cùng của mình đối với bạn.

6 Likes

mình thường đọc sách, năm gần đây chỉ học sách tiếng anh, thích hiểu sâu 1 vấn đề, ko hề học mót như bạn nói nhé. có 2 cách học: 1 bottom-up, 2 là top-down, top -down thường dùng cho vấn đề khó muốn hiểu nhanh xem kết quả sẽ ra sao.



.

Requested by @anon35998660

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?