Skip to content

Commit 5bdf063

Browse files
committed
proxy, reflect
1 parent 10125e0 commit 5bdf063

File tree

6 files changed

+116
-1
lines changed

6 files changed

+116
-1
lines changed

build/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ function checkStatement(
6868
} else if (
6969
ts.isFunctionDeclaration(statement) ||
7070
ts.isInterfaceDeclaration(statement) ||
71-
ts.isTypeAliasDeclaration(statement)
71+
ts.isTypeAliasDeclaration(statement) ||
72+
ts.isModuleDeclaration(statement)
7273
) {
7374
const repl = statement.name && replacement.has(statement.name.text);
7475
if (repl) {

build/replacement.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,6 @@ export const replacement = new Map([
3838
]),
3939
],
4040
["lib.es2015.promise.d.ts", new Set(["PromiseConstructor"])],
41+
["lib.es2015.proxy.d.ts", new Set(["ProxyHandler"])],
42+
["lib.es2015.reflect.d.ts", new Set(["Reflect"])],
4143
]);

lib/lib.es2015.proxy.d.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/// <reference no-default-lib="true"/>
2+
3+
interface ProxyHandler<T extends object> {
4+
getPrototypeOf?(target: T): object | null;
5+
setPrototypeOf?(target: T, v: unknown): boolean;
6+
isExtensible?(target: T): boolean;
7+
preventExtensions?(target: T): boolean;
8+
getOwnPropertyDescriptor?(
9+
target: T,
10+
p: PropertyKey
11+
): PropertyDescriptor | undefined;
12+
has?(target: T, p: PropertyKey): boolean;
13+
get?(target: T, p: PropertyKey, receiver: unknown): any;
14+
set?(target: T, p: PropertyKey, value: unknown, receiver: unknown): boolean;
15+
deleteProperty?(target: T, p: PropertyKey): boolean;
16+
defineProperty?(
17+
target: T,
18+
p: PropertyKey,
19+
attributes: PropertyDescriptor
20+
): boolean;
21+
enumerate?(target: T): PropertyKey[];
22+
ownKeys?(target: T): PropertyKey[];
23+
apply?(target: T, thisArg: unknown, argArray: unknown[]): any;
24+
construct?(target: T, argArray: unknown[], newTarget: unknown): object;
25+
}

lib/lib.es2015.reflect.d.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/// <reference no-default-lib="true"/>
2+
3+
declare namespace Reflect {
4+
function apply(
5+
target: Function,
6+
thisArgument: any,
7+
argumentsList: ArrayLike<any>
8+
): unknown;
9+
function construct(
10+
target: Function,
11+
argumentsList: ArrayLike<any>,
12+
newTarget?: any
13+
): object;
14+
function defineProperty(
15+
target: object,
16+
propertyKey: PropertyKey,
17+
attributes: PropertyDescriptor
18+
): boolean;
19+
function deleteProperty(target: object, propertyKey: PropertyKey): boolean;
20+
function get<T, K extends PropertyKey>(
21+
target: T,
22+
propertyKey: K,
23+
receiver?: any
24+
): K extends keyof T ? T[K] : unknown;
25+
function getOwnPropertyDescriptor(
26+
target: object,
27+
propertyKey: PropertyKey
28+
): PropertyDescriptor | undefined;
29+
function getPrototypeOf(target: object): object;
30+
function has(target: object, propertyKey: PropertyKey): boolean;
31+
function isExtensible(target: object): boolean;
32+
function ownKeys(target: object): PropertyKey[];
33+
function preventExtensions(target: object): boolean;
34+
function set(
35+
target: object,
36+
propertyKey: PropertyKey,
37+
value: any,
38+
receiver?: any
39+
): boolean;
40+
function setPrototypeOf(target: object, proto: any): boolean;
41+
}

tests/es2015.proxy.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/// <reference path="../dist/lib/lib.es2015.d.ts" />
2+
3+
import { expectType } from "tsd";
4+
5+
// ProxyHandler
6+
new Proxy(
7+
{},
8+
{
9+
setPrototypeOf(t, v) {
10+
expectType<unknown>(v);
11+
return true;
12+
},
13+
get(t, p, receiver) {
14+
expectType<unknown>(receiver);
15+
},
16+
set(t, p, value, receiver) {
17+
expectType<unknown>(value);
18+
expectType<unknown>(receiver);
19+
return true;
20+
},
21+
apply(t, thisArg, argArray) {
22+
expectType<unknown>(thisArg);
23+
expectType<unknown[]>(argArray);
24+
},
25+
construct(t, argArray, newTarget) {
26+
expectType<unknown[]>(argArray);
27+
expectType<unknown>(newTarget);
28+
return {};
29+
},
30+
}
31+
);

tests/es2015.reflect.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/// <reference path="../dist/lib/lib.es2015.d.ts" />
2+
3+
import { expectType } from "tsd";
4+
5+
expectType<unknown>(Reflect.apply(() => {}, {}, []));
6+
expectType<object>(Reflect.construct(function () {}, []));
7+
{
8+
const obj1 = {
9+
foo: 123,
10+
bar: "wow",
11+
};
12+
expectType<number>(Reflect.get(obj1, "foo"));
13+
expectType<string>(Reflect.get(obj1, "bar"));
14+
expectType<unknown>(Reflect.get(obj1, 123));
15+
}

0 commit comments

Comments
 (0)