{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments/84548590","pull_request_review_id":5323327,"id":84548590,"diff_hunk":"@@ -5667,6 +5752,191 @@ namespace ts {\n             return links.resolvedType;\r\n         }\r\n \r\n+        function getTypeFromSpreadTypeLiteral(node: Node, aliasSymbol?: Symbol, aliasTypeArguments?: Type[]): Type {\r\n+            let members: Map<Symbol>;\r\n+            let stringIndexInfo: IndexInfo;\r\n+            let numberIndexInfo: IndexInfo;\r\n+            const spreads: Type[] = [];\r\n+            for (const member of (node as TypeLiteralNode).members) {\r\n+                if (member.kind === SyntaxKind.SpreadTypeElement) {\r\n+                    if (members) {\r\n+                        spreads.push(createAnonymousType(node.symbol, members, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo));\r\n+                        members = undefined;\r\n+                        stringIndexInfo = undefined;\r\n+                        numberIndexInfo = undefined;\r\n+                    }\r\n+                    spreads.push(getTypeFromTypeNode((member as SpreadTypeElement).type));\r\n+                }\r\n+                else if (member.kind === SyntaxKind.IndexSignature) {\r\n+                    const index = member as IndexSignatureDeclaration;\r\n+                    if (index.parameters.length === 1) {\r\n+                        const parameter = index.parameters[0];\r\n+                        if (parameter && parameter.type) {\r\n+                            const indexInfo = createIndexInfo(index.type ? getTypeFromTypeNode(index.type) : anyType,\r\n+                                                              (getModifierFlags(index) & ModifierFlags.Readonly) !== 0, index);\r\n+                            if (parameter.type.kind === SyntaxKind.StringKeyword) {\r\n+                                stringIndexInfo = indexInfo;\r\n+                            }\r\n+                            else {\r\n+                                numberIndexInfo = indexInfo;\r\n+                            }\r\n+                        }\r\n+                    }\r\n+                }\r\n+                else if (member.kind !== SyntaxKind.CallSignature && member.kind !== SyntaxKind.ConstructSignature) {\r\n+                    // note that spread types don't include call and construct signatures\r\n+                    const flags = SymbolFlags.Property | SymbolFlags.Transient | (member.questionToken ? SymbolFlags.Optional : 0);\r\n+                    const text = getTextOfPropertyName(member.name);\r\n+                    const symbol = <TransientSymbol>createSymbol(flags, text);\r\n+                    symbol.declarations = [member];\r\n+                    symbol.valueDeclaration = member;\r\n+                    symbol.type = getTypeFromTypeNodeNoAlias((member as IndexSignatureDeclaration | PropertySignature | MethodSignature).type);\r\n+                    if (!members) {\r\n+                        members = createMap<Symbol>();\r\n+                    }\r\n+                    members[symbol.name] = symbol;\r\n+                }\r\n+            }\r\n+            if (members || stringIndexInfo || numberIndexInfo) {\r\n+                spreads.push(createAnonymousType(node.symbol, members || emptySymbols, emptyArray, emptyArray, stringIndexInfo, numberIndexInfo));\r\n+            }\r\n+            return getSpreadType(spreads, node.symbol, aliasSymbol, aliasTypeArguments);\r\n+        }\r\n+\r\n+        function getSpreadType(types: Type[], symbol: Symbol, aliasSymbol?: Symbol, aliasTypeArguments?: Type[]): Type {\r\n+            if (types.length === 0) {\r","path":"src/compiler/checker.ts","position":301,"original_position":301,"commit_id":"fdfb159024047fff8980391653cda6419046fa36","original_commit_id":"fdfb159024047fff8980391653cda6419046fa36","user":{"login":"sandersn","id":293473,"avatar_url":"https://avatars.githubusercontent.com/u/293473?v=3","gravatar_id":"","url":"https://api.github.com/users/sandersn","html_url":"https://github.com/sandersn","followers_url":"https://api.github.com/users/sandersn/followers","following_url":"https://api.github.com/users/sandersn/following{/other_user}","gists_url":"https://api.github.com/users/sandersn/gists{/gist_id}","starred_url":"https://api.github.com/users/sandersn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sandersn/subscriptions","organizations_url":"https://api.github.com/users/sandersn/orgs","repos_url":"https://api.github.com/users/sandersn/repos","events_url":"https://api.github.com/users/sandersn/events{/privacy}","received_events_url":"https://api.github.com/users/sandersn/received_events","type":"User","site_admin":false},"body":"instead of passing a types array, have the callers of getSpreadType call it repeatedly with left and right.","created_at":"2016-10-21T21:34:49Z","updated_at":"2016-10-21T22:04:38Z","html_url":"https://github.com/Microsoft/TypeScript/pull/11150#discussion_r84548590","pull_request_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments/84548590"},"html":{"href":"https://github.com/Microsoft/TypeScript/pull/11150#discussion_r84548590"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150","id":86780119,"html_url":"https://github.com/Microsoft/TypeScript/pull/11150","diff_url":"https://github.com/Microsoft/TypeScript/pull/11150.diff","patch_url":"https://github.com/Microsoft/TypeScript/pull/11150.patch","issue_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/11150","number":11150,"state":"open","locked":false,"title":"Object spread","user":{"login":"sandersn","id":293473,"avatar_url":"https://avatars.githubusercontent.com/u/293473?v=3","gravatar_id":"","url":"https://api.github.com/users/sandersn","html_url":"https://github.com/sandersn","followers_url":"https://api.github.com/users/sandersn/followers","following_url":"https://api.github.com/users/sandersn/following{/other_user}","gists_url":"https://api.github.com/users/sandersn/gists{/gist_id}","starred_url":"https://api.github.com/users/sandersn/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sandersn/subscriptions","organizations_url":"https://api.github.com/users/sandersn/orgs","repos_url":"https://api.github.com/users/sandersn/repos","events_url":"https://api.github.com/users/sandersn/events{/privacy}","received_events_url":"https://api.github.com/users/sandersn/received_events","type":"User","site_admin":false},"body":"Fixes #10727, \r\nFixes #2013\r\nFixes #11100\r\n\r\n### Updates to proposed semantics: type variable assignability ###\r\n\r\nA spread type containing spread elements whose types are type variables is assignable to another spread type also containing type variables if the non-type-variable properties and index signatures are assignable as above and the the type variables are the same variables in the same order. \r\n\r\nFor example: `{ a: number, ...T, b: number, ...U, ...x }` is assignable to `{ b: number, a: number, ...x ...T, ...U}` and vice versa. But the similar `{ a: number, ...T, b: number, ...U, ...x }` is not assignable to `{ b: number, a: number, ...x ...U, ...T}` because the order of `T` and `U` is reversed.\r\n\r\nThis rule is not strictly safe, since a type parameter could override any properties that precede it (see the rule for `private` below), but it would be odd if `{ ...T, ...U }` were not assignable to `{ ...T, ...U }`. Instead, this rule assumes that the contents of a type variable will not conflict with other properties.\r\n\r\n### Important Implementation Details ###\r\n\r\nSpread types use a binary representation to make recursive transformations easier. This matches the proposal but the syntax remains close to spread's expression syntax.\r\n\r\n`getSpreadType` creates a spread only if the spread type contains a type parameter. Otherwise it will create an anonymous type, or union or intersection of anonymous types. The binary structure is left deep, so the left side of a spread type is either another spread (the recursive case) or an object type (the terminal case). The right side of spread type is either a type parameter or an object type. Adjacent object types are spread into a single object type, so the structure will never have two adjacent object types, only adjacent type parameters.\r\n\r\n### Updated proposal ###\r\n\r\nThe spread part of #10727's updated proposal follows for convenience:\r\n\r\nThe spread type is a new type operator that types the [TC39 stage 3 object spread operator](https://github.com/sebmarkbage/ecmascript-rest-spread). Its counterpart, the difference type, will type the proposed object rest destructuring operator. The spread type `{ ...A, ...B }` combines the properties, but not the call or construct signatures, of entities A and B.\r\n\r\nThe original issue for spread/rest types is #2103. Note that this proposal deviates from the specification by keeping all properties except methods, not just own enumerable ones.\r\n\r\n## Proposal syntax\r\n\r\nThe type syntax in this proposal differs from the type syntax as implemented in order to treat spread as a binary operator. Three rules are needed to convert the `{ ...spread }` syntax to binary syntax `spread1 ... spread2`.\r\n\r\n1. `{ ...spread }` becomes `{} ... spread`.\r\n2. `{ a, b, c, ...d}` becomes `{a, b, c} ... d`\r\n3. Multiple spreads inside an object literal are treated as sequences of binary spreads: `{ a, b, c, ...d, ...e, f, g}` becomes `{a, b, c} ... d ... e ... { f, g }`.\r\n\r\n## Type Relationships\r\n\r\n * Identity: `{} ... A` is equivalent to the properties of `A`. `A ... A ... A` is equivalent to `A ... A` and `A ... A` is equivalent to `{} ... A`.\r\n * Commutativity: `A ... B` is *not* equivalent to `B ... A`. Properties of `B` overwrite properties of `A` with the same name.\r\n * Associativity: `(A ... B) ... C` is equivalent to `A ... (B ... C)`. `...` is right-associative.\r\n * Distributivity: Spread is distribute over both `|` and `&`, so `A ... (B | C)` is equivalent to `A ... B | A ... C` and `A ... (B & C)` is equivalent to `A ... B & A ... C`.\r\n\r\n## Assignment compatibility\r\n\r\n * `A ... B` is assignable to `X` if the properties and index signatures of `A ... B` are assignable to those of `X`, and `X` has no call or construct signatures.\r\n * `X` is assignable to `A ... B` if the properties and index signatures of `X` are assignable to those of `A ... B`.\r\n\r\n### Type variables\r\n\r\nA spread type containing type parameters is assignable to another spread type if the the non-type-variable properties and index signatures are assignable as above and the type variables are the same variables in the same order. \r\n\r\nFor example: `{ a: number, b: number } ... T` is assignable to `{ a: number } ...T` and to `T ... { a: number }`. But the similar `T ... U` is not assignable to `U ... T` because the order of `T` and `U` is reversed.\r\n\r\n### Type inference\r\n\r\nType inference is allowed between an object type source and a spread type target with a type parameter as either the left or right side. If the type parameter is on the right, then its inferred type is the whole source type. If the type parameter is on the left, then its inferred type is the source type minus properties on the right side of the spread.\r\n\r\nFor example, if the target is `T ... { a: number }` and the source is `{ a: number, b: string }`, the inferred type for `T` is `{ b: string }`. Because spread types remove call and construct signatures, if the source were `{ a: number, b: string, (): void }`, the type inferred for `T` would still be `{ b: string }`.\r\n\r\n## Properties and index signatures\r\n\r\nIn the following definitions, 'property' means either a property or a get accessor.\r\n\r\nThe type `A ... B` has a property `P` if `A` has a property `P` or `B` has a property `P`. In this case `(A ... B).P` has the type \r\n \r\n 1. Of `B.P` if `B.P` is not optional.\r\n 2. Of `A.P | B.P` if `B.P` is optional and `A` has a property `P`.\r\n 3. Of `A.P` otherwise.\r\n\r\nIndex signatures spread the same way as properties.\r\n\r\n`private`, `protected` and `readonly` behave the same way as optionality except that if `A.P` or `B.P` is `private`, `protected` or `readonly`, then `(A ...B).P` is `private`, `protected` or `readonly`, respectively.\r\n\r\n## Call and Construct signatures\r\n\r\n`A ... B` has no call signatures and no construct signatures, since these are not properties.\r\n\r\n## Precedence\r\n\r\nPrecedence of `...` is higher than `&` and `|`. Since the language syntax is that of object type literals, precedence doesn't matter since the braces act as boundaries of the spread type.\r\n\r\n## Examples\r\nTaken from the [TC39 proposal](https://github.com/sebmarkbage/ecmascript-rest-spread/blob/master/Spread.md) and given types.\r\n\r\n### Shallow Clone (excluding prototype)\r\n\r\n```ts\r\nlet aClone: { ...A } = { ...a };\r\n```\r\n\r\n### Merging Two Objects\r\n\r\n```ts\r\nlet ab: { ...A, ...B } = { ...a, ...b };\r\n```\r\n\r\n### Overriding Properties\r\n\r\n```ts\r\nlet aWithOverrides: { ...A, x: number, y: number } = { ...a, x: 1, y: 2 };\r\n// equivalent to\r\nlet aWithOverrides: { ...A, ...{ x: number, y: number } } = { ...a, ...{ x: 1, y: 2 } };\r\n```\r\n\r\n### Default Properties\r\n\r\n```ts\r\nlet aWithDefaults: { x: number, y: number, ...A } = { x: 1, y: 2, ...a };\r\n```\r\n\r\n### Multiple Merges\r\n\r\n```ts\r\n// Note: getters on a are executed twice\r\nlet xyWithAandB: { x: number, ...A, y: number, ...B, ...A } = { x: 1, ...a, y: 2, ...b, ...a };\r\n// equivalent to\r\nlet xyWithAandB: { x: number, y: number, ...B, ...A } = { x: 1, ...a, y: 2, ...b, ...a };\r\n```\r\n\r\n### Getters on the Object Initializer\r\n\r\n```ts\r\n// Does not throw because .x isn't evaluated yet. It's defined.\r\nlet aWithXGetter: { ...A, x: never } = { ...a, get x() { throw new Error('not thrown yet') } };\r\n```\r\n\r\n### Getters in the Spread Object\r\n\r\n```ts\r\n// Throws because the .x property of the inner object is evaluated when the\r\n// property value is copied over to the surrounding object initializer.\r\nlet runtimeError: { ...A, x: never } = { ...a, ...{ get x() { throw new Error('thrown now') } } };\r\n```\r\n\r\n### Setters Are Not Executed When They're Redefined\r\n\r\n```ts\r\nlet z: { x: number } = { set x() { throw new Error(); }, ...{ x: 1 } }; // No error\r\n```\r\n\r\n### Null/Undefined Are Ignored\r\n\r\n```ts\r\nlet emptyObject: {} = { ...null, ...undefined }; // no runtime error\r\n```\r\n\r\n### Updating Deep Immutable Object\r\n\r\n```ts\r\nlet newVersion: { ...A, name: string, address: { address, zipCode: string }, items: { title: string }[] } = {\r\n  ...previousVersion,\r\n  name: 'New Name', // Override the name property\r\n  address: { ...previousVersion.address, zipCode: '99999' } // Update nested zip code\r\n  items: [...previousVersion.items, { title: 'New Item' }] // Add an item to the list of items\r\n};\r\n```\r\n\r\nNote: If `A = { name: string, address: { address, zipCode: string }, items: { title: string }[] }`, then the type of newVersion is equivalent to `A`","created_at":"2016-09-26T16:59:03Z","updated_at":"2016-10-21T22:04:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"007adb63bbc8f37e5de028f8f09decc0774fd976","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150/commits","review_comments_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150/comments","review_comment_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/11150/comments","statuses_url":"https://api.github.com/repos/Microsoft/TypeScript/statuses/fdfb159024047fff8980391653cda6419046fa36","head":{"label":"Microsoft:object-spread","ref":"object-spread","sha":"fdfb159024047fff8980391653cda6419046fa36","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":20929025,"name":"TypeScript","full_name":"Microsoft/TypeScript","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/TypeScript","description":"TypeScript is a superset of JavaScript that compiles to clean JavaScript output.","fork":false,"url":"https://api.github.com/repos/Microsoft/TypeScript","forks_url":"https://api.github.com/repos/Microsoft/TypeScript/forks","keys_url":"https://api.github.com/repos/Microsoft/TypeScript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/TypeScript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/TypeScript/teams","hooks_url":"https://api.github.com/repos/Microsoft/TypeScript/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/TypeScript/events","assignees_url":"https://api.github.com/repos/Microsoft/TypeScript/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/TypeScript/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/TypeScript/tags","blobs_url":"https://api.github.com/repos/Microsoft/TypeScript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/TypeScript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/TypeScript/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/TypeScript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/TypeScript/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/TypeScript/languages","stargazers_url":"https://api.github.com/repos/Microsoft/TypeScript/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/TypeScript/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/TypeScript/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/TypeScript/subscription","commits_url":"https://api.github.com/repos/Microsoft/TypeScript/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/TypeScript/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/TypeScript/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/TypeScript/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/TypeScript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/TypeScript/merges","archive_url":"https://api.github.com/repos/Microsoft/TypeScript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/TypeScript/downloads","issues_url":"https://api.github.com/repos/Microsoft/TypeScript/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/TypeScript/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/TypeScript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/TypeScript/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/TypeScript/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/TypeScript/deployments","created_at":"2014-06-17T15:28:39Z","updated_at":"2016-10-21T20:07:51Z","pushed_at":"2016-10-21T21:48:13Z","git_url":"git://github.com/Microsoft/TypeScript.git","ssh_url":"git@github.com:Microsoft/TypeScript.git","clone_url":"https://github.com/Microsoft/TypeScript.git","svn_url":"https://github.com/Microsoft/TypeScript","homepage":"http://www.typescriptlang.org","size":595012,"stargazers_count":16023,"watchers_count":16023,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2173,"mirror_url":null,"open_issues_count":1472,"forks":2173,"open_issues":1472,"watchers":16023,"default_branch":"master"}},"base":{"label":"Microsoft:master","ref":"master","sha":"aabfcfb5e1e6ba79f802678bc72ba2517c694533","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":20929025,"name":"TypeScript","full_name":"Microsoft/TypeScript","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars.githubusercontent.com/u/6154722?v=3","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/TypeScript","description":"TypeScript is a superset of JavaScript that compiles to clean JavaScript output.","fork":false,"url":"https://api.github.com/repos/Microsoft/TypeScript","forks_url":"https://api.github.com/repos/Microsoft/TypeScript/forks","keys_url":"https://api.github.com/repos/Microsoft/TypeScript/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/TypeScript/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/TypeScript/teams","hooks_url":"https://api.github.com/repos/Microsoft/TypeScript/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/TypeScript/events","assignees_url":"https://api.github.com/repos/Microsoft/TypeScript/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/TypeScript/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/TypeScript/tags","blobs_url":"https://api.github.com/repos/Microsoft/TypeScript/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/TypeScript/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/TypeScript/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/TypeScript/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/TypeScript/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/TypeScript/languages","stargazers_url":"https://api.github.com/repos/Microsoft/TypeScript/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/TypeScript/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/TypeScript/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/TypeScript/subscription","commits_url":"https://api.github.com/repos/Microsoft/TypeScript/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/TypeScript/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/TypeScript/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/TypeScript/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/TypeScript/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/TypeScript/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/TypeScript/merges","archive_url":"https://api.github.com/repos/Microsoft/TypeScript/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/TypeScript/downloads","issues_url":"https://api.github.com/repos/Microsoft/TypeScript/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/TypeScript/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/TypeScript/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/TypeScript/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/TypeScript/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/TypeScript/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/TypeScript/deployments","created_at":"2014-06-17T15:28:39Z","updated_at":"2016-10-21T20:07:51Z","pushed_at":"2016-10-21T21:48:13Z","git_url":"git://github.com/Microsoft/TypeScript.git","ssh_url":"git@github.com:Microsoft/TypeScript.git","clone_url":"https://github.com/Microsoft/TypeScript.git","svn_url":"https://github.com/Microsoft/TypeScript","homepage":"http://www.typescriptlang.org","size":595012,"stargazers_count":16023,"watchers_count":16023,"language":"TypeScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":2173,"mirror_url":null,"open_issues_count":1472,"forks":2173,"open_issues":1472,"watchers":16023,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150"},"html":{"href":"https://github.com/Microsoft/TypeScript/pull/11150"},"issue":{"href":"https://api.github.com/repos/Microsoft/TypeScript/issues/11150"},"comments":{"href":"https://api.github.com/repos/Microsoft/TypeScript/issues/11150/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/TypeScript/pulls/11150/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/TypeScript/statuses/fdfb159024047fff8980391653cda6419046fa36"}}}}
{"actor":{"display_login":"sandersn"}}