Tìm kiếm trang web

typescript - Tại sao 'null' bị loại bỏ khỏi kiểu trả về của Document.getElementById trong VS Code?


Phiên bản VS Code:

Tôi đang thử một số mã 'Thu hẹp kiểu' trong VS Code, nhưng VS Code cung cấp thông tin loại khác với TypeScript Playground:

VS Code đưa ra: kiểu trả về của Document.getElementById là HTMLElement:

trong khi TypeScript Playground đưa ra:

kiểu trả về của Document.getElementById nên là HTMLElement | null:

el trước khi kiểm tra null được mong đợi có kiểu HTMLElement | null:

el sau khi kiểm tra null được kỳ vọng sẽ có kiểu HTMLElement như kiểu đã được thu hẹp:

Tôi đã nâng cấp gói TypeScript toàn cục lên phiên bản v4.0.2 và đặt typescript.tsdk thành /Users/<username>/.nvm/versions/node/v12.16.3/lib/node_modules/typescript/lib trong user settings.json

Tôi đã thiết lập các tùy chọn kiểm tra kiểu nghiêm ngặt thành:

    /* Strict Type-Checking Options */
    "strict": true,
    // "noImplicitAny": true,
    "strictNullChecks": true,
    "strictFunctionTypes": true,
    // "strictBindCallApply": true,
    // "strictPropertyInitialization": true, 
    // "noImplicitThis": true,
    "alwaysStrict": true,

Có phải tôi đã bỏ sót một số cấu hình trong tsconfig.json không?

Câu trả lời #1

Theo tài liệu VS Code:

Thông thường bước đầu tiên trong bất kỳ dự án TypeScript mới nào là thêm một tệp tsconfig.json. Một tệp tsconfig.json xác định cài đặt dự án TypeScript, chẳng hạn như các tùy chọn trình biên dịch và các tệp cần được bao gồm. Để thực hiện điều này, hãy mở thư mục nơi bạn muốn lưu trữ mã nguồn và thêm một tệp mới có tên tsconfig.json. Khi đã ở trong tệp này, IntelliSense (Ctrl+Space) sẽ hỗ trợ bạn trong suốt quá trình.

Vì vậy, tệp tsconfig.json nên được đặt trong thư mục gốc của dự án của bạn. Một bước nữa để giải quyết vấn đề của bạn là thêm "strict": true vào tệp tsconfig.json mới tạo của bạn.

Bài viết liên quan