microsoft / microsoft/TypeScript
Symbol type is incorrectly generalized when used as a property value of an object literal
Đang mở
@rbuckton đang làm issue này rồi.
Từ ngày 20/2/2020.
Needs Investigation
- Ngôn ngữ chính
- Go
- Star
- 111k
- Fork
- 14.4k
- Merge trung bình
- 1 ngày 19 giờ
- Pull request đã merge (30 ngày)
- 117
Mô tả
TypeScript Version: 3.7.5
Search Terms: symbol infer type
Expected behavior:
Symbol const uniqueSymbol = Symbol() when used as property value in an object literal is inferred as unique type typeof uniqueSymbol.
Actual behavior:
Symbol const uniqueSymbol = Symbol() when used as property value in an object literal is inferred as general type symbol.
Related Issues:
Code
const uniqueSymbol = Symbol()
// Example of incorrect inference (unique symbol is generalized to type `symbol`)
const foo = {
prop: uniqueSymbol,
}
type Foo = typeof foo // { prop: symbol }
// Workarounds for incorrect behavior
const bar = {
prop: uniqueSymbol as typeof uniqueSymbol,
}
type Bar = typeof bar // { prop: typeof uniqueSymbol }
const genericFactory = <T>(value: T) => ({ prop: value })
const baz = genericFactory(uniqueSymbol)
type Baz = typeof baz // { prop: typeof uniqueSymbol }
Output
"use strict";
const uniqueSymbol = Symbol();
// Example of incorrect inference (unique symbol is generalized to type `symbol`)
const foo = {
prop: uniqueSymbol,
};
// Workarounds for incorrect behavior
const bar = {
prop: uniqueSymbol,
};
const genericFactory = (value) => ({ prop: value });
const baz = genericFactory(uniqueSymbol);
Compiler Options
{
"compilerOptions": {
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictPropertyInitialization": true,
"strictBindCallApply": true,
"noImplicitThis": true,
"noImplicitReturns": true,
"useDefineForClassFields": false,
"alwaysStrict": true,
"allowUnreachableCode": false,
"allowUnusedLabels": false,
"downlevelIteration": false,
"noEmitHelpers": false,
"noLib": false,
"noStrictGenericChecks": false,
"noUnusedLocals": false,
"noUnusedParameters": false,
"esModuleInterop": true,
"preserveConstEnums": false,
"removeComments": false,
"skipLibCheck": false,
"checkJs": false,
"allowJs": false,
"declaration": true,
"experimentalDecorators": false,
"emitDecoratorMetadata": false,
"target": "ES2017",
"module": "ESNext"
}
}
Playground Link: Provided
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.
Đánh giá
Issue này chưa được đánh giá.