Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
gnlow committed May 21, 2023
1 parent 6868523 commit 8d1bfed
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 24 deletions.
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
# ufcs

```ts
import { ufcs } from "./mod.ts"

const Duck = ufcs(class Duck {
quack() {
console.log("Quack!")
quack(num: number) {
console.log("Quack!", num)
}
})
Duck.quack(new Duck)

const d = new Duck
const duck = new Duck
Duck.quack(123)(duck); // Quack! 123
duck.quack(456) // Quack! 456
```
23 changes: 7 additions & 16 deletions mod.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
type Ufcs<C extends {"prototype": any}> = {
[K in keyof C["prototype"]]:
C["prototype"][K] extends (...args: any[]) => any
? (...args: Parameters<C["prototype"][K]>) => (_this: C) => ReturnType<C["prototype"][K]>
export type Ufcs<C> = {
[K in keyof C]:
C[K] extends (...args: any[]) => any
? (...args: Parameters<C[K]>) => (_this: C) => ReturnType<C[K]>
: never
} & C
} & { new (): C }

export const ufcs = <C extends {"prototype": unknown}>(_class: C) => {
export const ufcs = <C>(_class: { new (): C }) => {
Object.getOwnPropertyNames(_class.prototype)
.forEach(prop => {
if (prop != "constructor") {
Expand All @@ -15,13 +15,4 @@ export const ufcs = <C extends {"prototype": unknown}>(_class: C) => {
}
})
return _class as unknown as Ufcs<C>
}

const Duck = ufcs(class Duck {
quack(num: number) {
console.log("Quack!", num)
}
})
const duck = new Duck
Duck.quack(123)(duck); // Quack! 123
duck.quack(123) // Quack! 123
}
8 changes: 5 additions & 3 deletions test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import { ufcs } from "./mod.ts"

const Duck = ufcs(class Duck {
quack() {
console.log("Quack!")
quack(num: number) {
console.log("Quack!", num)
}
})
Duck.quack(new Duck) // Quack!
const duck = new Duck
Duck.quack(123)(duck); // Quack! 123
duck.quack(456) // Quack! 456

0 comments on commit 8d1bfed

Please sign in to comment.