Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Awaitable typeguards

Đang mở
#1,872 1 bình luận 1 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Đánh giá

Độ khó
5/5
Thời gian dự kiến
Hơn một tuần
Mức phù hợp với người mới
25/100
Loại issue
Tính năng
Độ rõ ràng
Cần làm rõ
Mức độ hoạt động
Đình trệ
Công nghệ
python
Lĩnh vực
devtools

Hướng nghiên cứu

Issue không nêu tên tệp nào trong repository, test hay điểm bắt đầu của phần triển khai. Hãy bắt đầu bằng việc xem xét cách đặc tả typing xử lý các hàm async trả về TypeIs hoặc TypeGuard, sau đó xác định narrowing được đề xuất nên được định nghĩa như thế nào; công việc được xem là hoàn tất khi có đặc tả đã được thống nhất cùng với phần triển khai và các test tương ứng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

topic: feature

Currently it seems impossible to have async TypeGuard or TypeIs:

from typing_extensions import TypeIs

async def foo(a: int | str) -> TypeIs[int]:
    raise NotImplementedError

async def main() -> None:
    a: int | str = 10
    if await foo(a):
        reveal_type(a)
    else:
        reveal_type(a)

Current specification is not clear about how async functions returning TypeIs or TypeGuards should be treated, but I believe this would be useful for async lazy evaluation of typestate fields, example:

from typing_extensions import TypeIs, TypeVar, Generic


T = TypeVar('T', int | None, int, None, covariant=True)


class A(Generic[T]):
    _a: T
    
    async def get_a(self: A[int | None]) -> int | None:
        a = 123  # imagine some expensive async operation, e.g. fetch value from API
        self._a = a
        return self._a
        
    def method_requires_a(self: A[int]) -> None:
        raise NotImplementedError
        
    def __init__(self):
        self._a = None

async def has_a(a: A[int | None]) -> TypeIs[A[int]]:
    return await a.get_a() is not None
 
 
async def main(a: A[int | None]):
    if await has_a(a):
        a.method_requires_a()  # currently fails as type was not narrowed
Ngôn ngữ chính
Python
Star
1.8k
Fork
302
Merge trung bình
23 giờ
Pull request đã merge (30 ngày)
8

Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của python/typing

Tất cả issue của python/typing

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.