Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7797b1d

Browse filesBrowse files
committed
Always use getPropertyOfObjectType in isKnownProperty
It doesn't make sense to say that 'toString' is part of a weak type since having 'toString' would mean that the type isn't actually weak.
1 parent b509e68 commit 7797b1d
Copy full SHA for 7797b1d

1 file changed

+10-6Lines changed: 10 additions & 6 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/checker.ts‎

Copy file name to clipboardExpand all lines: src/compiler/checker.ts
+10-6Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9427,7 +9427,7 @@ namespace ts {
94279427
function hasCommonProperties(source: Type, target: Type) {
94289428
const isComparingJsxAttributes = !!(source.flags & TypeFlags.JsxAttributes);
94299429
for (const prop of getPropertiesOfType(source)) {
9430-
if (isKnownProperty(target, prop.name, isComparingJsxAttributes, /*skipGlobalObject*/ true)) {
9430+
if (isKnownProperty(target, prop.name, isComparingJsxAttributes)) {
94319431
return true;
94329432
}
94339433
}
@@ -14214,19 +14214,23 @@ namespace ts {
1421414214

1421514215
/**
1421614216
* Check if a property with the given name is known anywhere in the given type. In an object type, a property
14217-
* is considered known if the object type is empty and the check is for assignability, if the object type has
14218-
* index signatures, or if the property is actually declared in the object type. In a union or intersection
14219-
* type, a property is considered known if it is known in any constituent type.
14217+
* is considered known if
14218+
* 1. the object type is empty and the check is for assignability, or
14219+
* 2. if the object type has index signatures, or
14220+
* 3. if the property is actually declared in the object type
14221+
* (this means that 'toString', for example, is not usually a known property).
14222+
* 4. In a union or intersection type,
14223+
* a property is considered known if it is known in any constituent type.
1422014224
* @param targetType a type to search a given name in
1422114225
* @param name a property name to search
1422214226
* @param isComparingJsxAttributes a boolean flag indicating whether we are searching in JsxAttributesType
1422314227
*/
14224-
function isKnownProperty(targetType: Type, name: string, isComparingJsxAttributes: boolean, skipGlobalObject?: boolean): boolean {
14228+
function isKnownProperty(targetType: Type, name: string, isComparingJsxAttributes: boolean): boolean {
1422514229
if (targetType.flags & TypeFlags.Object) {
1422614230
const resolved = resolveStructuredTypeMembers(<ObjectType>targetType);
1422714231
if (resolved.stringIndexInfo ||
1422814232
resolved.numberIndexInfo && isNumericLiteralName(name) ||
14229-
(skipGlobalObject ? getPropertyOfObjectType(targetType, name) : getPropertyOfType(targetType, name)) ||
14233+
getPropertyOfObjectType(targetType, name) ||
1423014234
isComparingJsxAttributes && !isUnhyphenatedJsxName(name)) {
1423114235
// For JSXAttributes, if the attribute has a hyphenated name, consider that the attribute to be known.
1423214236
return true;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.