Generic class in a reference cycle measured invariant in 7.1: `Link<Sub>` no longer assignable to `Link<EntityBase>` (@sap-cloud-sdk/odata-common)
Maintainer thường phản hồi trong vòng 1 ngày
Đánh giá
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức phù hợp với người mới
- 46/100
- Loại issue
- Lỗi
- Độ rõ ràng
- Đặc tả rõ ràng
- Mức độ hoạt động
- Sôi nổi
- Công nghệ
- go, typescript
Hướng nghiên cứu
Start by comparing TypeScript 7.0.2 and 7.1 behavior with the supplied minimal reproduction and strict tsconfig; the issue identifies variance computation and a possible connection to microsoft/typescript-go#4820. Trace the reported Link → EntityApi → RequestBuilder → Selectable reference cycle and inspect the variance elaboration path. Done means the reproduction compiles as it did on 7.0.2 while preserving the reported assignability behavior.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
🔎 Search Terms
variance circularity, circular variance class, variance computed invariant, subclass type argument not assignable, @sap-cloud-sdk Link not assignable, 7.1 variance regression
🕗 Version & Regression Information
- This changed between versions 7.0.2 (gitHead 2bd066d8) and 7.1.0-beta (gitHead 3e923636)
- passes on 7.0.2, fails on 7.1.0-beta, 7.1.0-dev.20261022.1, 7.1.0-dev.20261027.1 and 7.1.0-dev.20261028.1
- same result with
--singleThreaded
⏯ Playground Link
n/a - needs the @sap-cloud-sdk/odata-common package
💻 Code
// repro.ts - @sap-cloud-sdk/[email protected], node 24.18
import type { DefaultDeSerializers, EntityApi, EntityBase, Link } from '@sap-cloud-sdk/odata-common';
type D = DefaultDeSerializers;
declare class Sub extends EntityBase { readonly _oDataVersion: 'v2'; id: string }
declare const l: Link<Sub, D, EntityApi<EntityBase, D>>;
export const l2: Link<EntityBase, D, EntityApi<EntityBase, D>> = l;
// tsconfig.json
{
"compilerOptions": { "strict": true, "noEmit": true, "module": "nodenext", "target": "es2022", "skipLibCheck": true },
"files": ["repro.ts"]
}
npm i @sap-cloud-sdk/[email protected] && tsc -p .
🙁 Actual behavior
repro.ts(6,14): error TS2322: Type 'Link<Sub, DefaultDeSerializers, EntityApi<EntityBase, DefaultDeSerializers>>' is not assignable to type 'Link<EntityBase, DefaultDeSerializers, EntityApi<EntityBase, DefaultDeSerializers>>'.
Property 'id' is missing in type 'EntityBase' but required in type 'Sub'.
🙂 Expected behavior
no error, like 7.0.2. Link only uses EntityT in covariant positions (readonly _entity: EntityT, readonly _entityApi: EntityApi<EntityT, DeSerializersT>), and EntityApi<Sub, D> is assignable to EntityApi<EntityBase, D> on 7.1 too
Additional information about the issue
copying Link and Selectable from the package into local files makes the same assignment pass on 7.1, so it seems to need the package's own reference cycle Link -> EntityApi<E> -> RequestBuilder<E> -> select(Selectable<E>) -> Link: the elaboration goes straight from Link to EntityBase vs Sub, as if Link's variance for EntityT was measured invariant without falling back to a structural check
possibly related: microsoft/typescript-go#4820 "Order variance computation by associated type symbol" (merged 2026-08-05) is in 7.1 (its port d20f192a in this repo is an ancestor of all four 7.1 gitHeads above) and not in 7.0.2 (2bd066d8 branches from typescript-go main at 52168999, 2026-07-08)
in a real service this breaks every SAP Cloud SDK call that passes a generated entity's request builder or link where the SDK takes the EntityBase form (new ODataBatchRequestBuilder(...), new BatchChangeSet(...), .select(SomeApi.schema.TO_X.select(...)), .filter(SomeApi.schema.TO_X.filter(...))): 41 errors in 26 files, all of them TS2345/TS2769 that 7.0.2 accepts
- Ngôn ngữ chính
- Go
- Star
- 112k
- Fork
- 15.4k
- Merge trung bình
- 3 ngày 1 giờ
- Pull request đã merge (30 ngày)
- 136
Chuẩn bị môi trường
Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.
- Không có Dockerfile hay tệp Docker Compose
- Có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của microsoft/TypeScript
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
microsoft/TypeScript#65290 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Native API: formatDiagnosticsWithColorAndContext drops related information without a file locationCó thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 75/100
microsoft/TypeScript#65087 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
TS7 LSP: documentHighlight returns nothing when the file path contains '@'Có thể làm lại được Pull request cho issue này đã bị đóng mà không được merge. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
microsoft/TypeScript#64758 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Language server (tsc --lsp) exits with code 1 after `shutdown` and `exit`Có thể đã có người làm @rajnish-verma-22172 đã nhận 14 ngày trước. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
microsoft/TypeScript#64742 · 1 bình luận ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Non-enum CLI options with multiple values separated by comma and space aren't whitespace trimmedCó thể đã có người làm @RyanCavanaugh đã nhận 28 ngày trước. Đang mởBug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
microsoft/TypeScript#64618 · 1 người được giao ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của microsoft/TypeScript
Issue tương tự
-
area:sampler tech-debt
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
jmbarzee/temporal-architect#302 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
riverqueue/river#1576 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
NFS StorageProvider renders a missing nfsSubDir as "<no value>"Có thể đã có người làm @ldming đã nhận hôm nay. Đang mởkind/bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
apecloud/kubeblocks#11067 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
area:ui bug priority:low
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 62/100
Maintainer thường phản hồi trong vòng 1 ngày
-
RTX payload type is not found when the RTX fmtp line has rtx-timeCó thể đã có người làm @RaphaelFakhri đã nhận hôm nay. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 82/100
Maintainer thường phản hồi trong vòng 1 ngày