Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit bf9a3ee

Browse files
authored
Merge branch 'master' into greenkeeper/@types/react-15.0.17
2 parents 4710b63 + 6eefaa7 commit bf9a3ee

File tree

5 files changed

+55
-11
lines changed

5 files changed

+55
-11
lines changed

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,23 @@
22

33
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
44

5+
<a name="0.20.0"></a>
6+
# [0.20.0](https://github.com/knisterpeter/react-to-typescript-definitions/compare/v0.19.1...v0.20.0) (2017-03-21)
7+
8+
9+
### Bug Fixes
10+
11+
* **package:** update babel-generator to version 6.24.0 ([20b8840](https://github.com/knisterpeter/react-to-typescript-definitions/commit/20b8840))
12+
* **package:** update dts-dom to version 0.1.16 ([2b0cf25](https://github.com/knisterpeter/react-to-typescript-definitions/commit/2b0cf25))
13+
* **package:** update pascal-case to version 2.0.1 ([fe8ad84](https://github.com/knisterpeter/react-to-typescript-definitions/commit/fe8ad84))
14+
15+
16+
### Features
17+
18+
* handle array props with shapes in extractComplexTypes ([efb0fa8](https://github.com/knisterpeter/react-to-typescript-definitions/commit/efb0fa8))
19+
20+
21+
522
<a name="0.19.1"></a>
623
## [0.19.1](https://github.com/knisterpeter/react-to-typescript-definitions/compare/v0.19.0...v0.19.1) (2017-03-02)
724

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-to-typescript-definitions",
3-
"version": "0.19.1",
3+
"version": "0.20.0",
44
"description": "Create typescript definitions files (d.ts) from react components",
55
"main": "dist/src/index.js",
66
"bin": {

src/typings.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,23 +126,25 @@ function extractComplexTypes(m: dom.ModuleDeclaration, interf: dom.InterfaceDecl
126126
if (member.kind === 'property' && isExtractableType(member.type)) {
127127
const name = `${componentName}${pascalCase(member.name)}`;
128128
const extractedMember = createModuleMember(name, member.type);
129-
extractedMember.flags = dom.DeclarationFlags.Export;
130-
m.members.push(extractedMember);
131-
member.type = dom.create.namedTypeReference(name);
129+
if (extractedMember) {
130+
extractedMember.flags = dom.DeclarationFlags.Export;
131+
m.members.push(extractedMember);
132+
member.type = createTypeReference(name, member.type);
133+
}
132134
}
133135
});
134136
}
135137

136-
type ExtractableType = dom.UnionType | dom.IntersectionType | dom.ObjectType;
138+
type ExtractableType = dom.UnionType | dom.IntersectionType | dom.ObjectType | dom.ArrayTypeReference;
137139

138140
function isExtractableType(type: dom.Type): type is ExtractableType {
139141
if (typeof type === 'object') {
140-
return ['union', 'intersection', 'object'].indexOf(type.kind) > -1;
142+
return ['union', 'intersection', 'object', 'array'].indexOf(type.kind) > -1;
141143
}
142144
return false;
143145
}
144146

145-
function createModuleMember(name: string, type: ExtractableType): dom.ModuleMember {
147+
function createModuleMember(name: string, type: ExtractableType): dom.ModuleMember | undefined {
146148
switch (type.kind) {
147149
case 'intersection':
148150
case 'union':
@@ -151,6 +153,17 @@ function createModuleMember(name: string, type: ExtractableType): dom.ModuleMemb
151153
const interf = dom.create.interface(name);
152154
interf.members = type.members;
153155
return interf;
156+
case 'array':
157+
return isExtractableType(type.type) ? createModuleMember(name, type.type) : undefined;
158+
}
159+
}
160+
161+
function createTypeReference(name: string, type: ExtractableType): dom.TypeReference {
162+
const namedTypeReference = dom.create.namedTypeReference(name);
163+
if (type.kind === 'array') {
164+
return dom.create.array(namedTypeReference);
165+
} else {
166+
return namedTypeReference;
154167
}
155168
}
156169

tests/es6-class.d.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,17 @@ declare module 'component' {
1414

1515
export type ComponentRequiredUnion = any[] | boolean;
1616

17+
export interface ComponentRequiredArrayOfObjectsWithShape {
18+
color?: string;
19+
fontSize?: number;
20+
}
21+
22+
export interface ComponentDeeplyNested {
23+
arrayInDeeplyNested?: {
24+
foo?: number;
25+
}[];
26+
}
27+
1728
export interface ComponentProps {
1829
/**
1930
* This is a jsdoc comment for optionalAny.
@@ -36,10 +47,8 @@ declare module 'component' {
3647
requiredAny: any;
3748
requiredUnion: ComponentRequiredUnion;
3849
requiredArrayOf: string[];
39-
requiredArrayOfObjectsWithShape: {
40-
color?: string;
41-
fontSize?: number;
42-
}[];
50+
requiredArrayOfObjectsWithShape: ComponentRequiredArrayOfObjectsWithShape[];
51+
deeplyNested: ComponentDeeplyNested[];
4352
requiredSymbol: typeof Symbol;
4453
}
4554

tests/es6-class.jsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,10 @@ Component.propTypes = {
4545
color: React.PropTypes.string,
4646
fontSize: React.PropTypes.number
4747
})).isRequired,
48+
deeplyNested: React.PropTypes.arrayOf(React.PropTypes.shape({
49+
arrayInDeeplyNested: React.PropTypes.arrayOf(React.PropTypes.shape({
50+
foo: React.PropTypes.number
51+
}))
52+
})).isRequired,
4853
requiredSymbol: React.PropTypes.symbol.isRequired,
4954
};

0 commit comments

Comments
 (0)