Skip to content

Commit 9e73579

Browse files
authored
Merge pull request #319 from jthoms1/master
Add overrides for interface types and add CustomEvent types for testing.
2 parents 1a54d1f + 1ebbef4 commit 9e73579

File tree

4 files changed

+64
-10
lines changed

4 files changed

+64
-10
lines changed

TS.fsx

+9-4
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,10 @@ module Emit =
779779
(DomTypeToNullableTsType m.Type m.Nullable.IsSome) = expectedMType &&
780780
m.Params.Length = 1 &&
781781
(DomTypeToTsType m.Params.[0].Type) = expectedParamType
782+
let processInterfaceType iName =
783+
match getOverriddenItems ItemKind.Interface Flavor.All |> Array.tryFind (matchInterface iName) with
784+
| Some it -> iName + "<" + (it.TypeParameters |> String.concat ", ") + ">"
785+
| _ -> iName
782786

783787
/// Emit overloads for the createElement method
784788
let EmitCreateElementOverloads (m: Browser.Method) =
@@ -1160,9 +1164,9 @@ module Emit =
11601164

11611165
let processedIName = processIName i.Name
11621166
if processedIName <> i.Name then
1163-
Pt.PrintlToStack "interface %s extends %s {" i.Name processedIName
1167+
Pt.PrintlToStack "interface %s extends %s {" (processInterfaceType i.Name) processedIName
11641168

1165-
Pt.Printl "interface %s" processedIName
1169+
Pt.Printl "interface %s" (processInterfaceType processedIName)
11661170
let finalExtends =
11671171
let overridenExtendsFromJson =
11681172
InputJson.getOverriddenItemsByInterfaceName ItemKind.Extends Flavor.All i.Name
@@ -1387,10 +1391,11 @@ module Emit =
13871391
EmitConstructor flavor i
13881392

13891393
let EmitDictionaries flavor =
1394+
13901395
let emitDictionary (dict:Browser.Dictionary) =
13911396
match dict.Extends with
1392-
| "Object" -> Pt.Printl "interface %s {" dict.Name
1393-
| _ -> Pt.Printl "interface %s extends %s {" dict.Name dict.Extends
1397+
| "Object" -> Pt.Printl "interface %s {" (processInterfaceType dict.Name)
1398+
| _ -> Pt.Printl "interface %s extends %s {" (processInterfaceType dict.Name) dict.Extends
13941399

13951400
let emitJsonProperty (p: InputJsonType.Root) =
13961401
let readOnlyModifier =

baselines/dom.generated.d.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ interface ConstrainVideoFacingModeParameters {
8282
ideal?: VideoFacingModeEnum | VideoFacingModeEnum[];
8383
}
8484

85-
interface CustomEventInit extends EventInit {
86-
detail?: any;
85+
interface CustomEventInit<T = any> extends EventInit {
86+
detail?: T;
8787
}
8888

8989
interface DeviceAccelerationDict {
@@ -2374,14 +2374,14 @@ declare var CSSSupportsRule: {
23742374
new(): CSSSupportsRule;
23752375
};
23762376

2377-
interface CustomEvent extends Event {
2378-
readonly detail: any;
2379-
initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: any): void;
2377+
interface CustomEvent<T = any> extends Event {
2378+
readonly detail: T;
2379+
initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void;
23802380
}
23812381

23822382
declare var CustomEvent: {
23832383
prototype: CustomEvent;
2384-
new(typeArg: string, eventInitDict?: CustomEventInit): CustomEvent;
2384+
new<T>(typeArg: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>;
23852385
};
23862386

23872387
interface DataCue extends TextTrackCue {

inputfiles/overridingTypes.json

+42
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,46 @@
11
[
2+
{
3+
"kind": "interface",
4+
"interface": "CustomEventInit",
5+
"typeParameters": [
6+
"T = any"
7+
]
8+
},
9+
{
10+
"kind": "property",
11+
"interface": "CustomEventInit",
12+
"name": "detail?",
13+
"type": "T"
14+
},
15+
{
16+
"kind": "interface",
17+
"interface": "CustomEvent",
18+
"typeParameters": [
19+
"T = any"
20+
]
21+
},
22+
{
23+
"kind": "property",
24+
"interface": "CustomEvent",
25+
"readonly": true,
26+
"name": "detail",
27+
"type": "T"
28+
},
29+
{
30+
"kind": "method",
31+
"interface": "CustomEvent",
32+
"name": "initCustomEvent",
33+
"signatures": [
34+
"initCustomEvent(typeArg: string, canBubbleArg: boolean, cancelableArg: boolean, detailArg: T): void"
35+
]
36+
},
37+
{
38+
"kind": "constructor",
39+
"interface": "CustomEvent",
40+
"signatures": [
41+
"new<T>(typeArg: string, eventInitDict?: CustomEventInit<T>): CustomEvent<T>"
42+
]
43+
},
244
{
345
"kind": "constructor",
446
"interface": "Response",

inputfiles/sample.json

+7
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,13 @@
337337
"baseInterface": "ParentNode",
338338
"interface": "Document"
339339
},
340+
{
341+
"kind": "interface",
342+
"interface": "CustomEventInit",
343+
"typeParameters": [
344+
"T = any"
345+
]
346+
},
340347
{
341348
"kind": "interface",
342349
"name": "ParentNode",

0 commit comments

Comments
 (0)