ç§ã®ãæ°ã«å
¥ãã®ææ¡:(ä»æ¥ãç§ãã¡ã¯æ¬åœã«this
ç¡æããã°ã©ã ãæžãããšãã§ããŸãã
åèãŸã§ã«ãTC39ã®ææ¡ïŒ https ïŒ
ææ¡ã¯ãŸã ã¹ããŒãž0ã§ããªããšããããã§ã¯ãããŸããã ãããèšèªã»ãã³ãã£ã¯ã¹ã«è¿œå ãããå Žåããã®ä»ã®è©³çŽ°ã¯å€æŽãããå¯èœæ§ããããŸãã
ããã¯ç§ãæåã«æãïŒEnumãã¢ãžã¥ãŒã«ã·ã¹ãã ã®ãããªããã€ãã®å€ããã®ãé€ããŠïŒãããããå®è£ ããtypescriptã¯ããããããå¯èŠåããæ®ãã®ecmaãšã³ã·ã¹ãã ã§ã®éèŠãé«ããããšãã§ããŸããïŒ
httpsïŒ//vanslaars.io/post/create-pipe-function / ...ã«è§Šçºãããè¡æ¹äžæã®ãã€ãã©ã€ã³ãªãã¬ãŒã¿ãŒã®åé¿çãå ±æãããã£ãã ã
// SyncPipe with synchronous reduction
type SyncPipeMapper<T, U> = (data: T | U) => U;
type SyncPipeReducer<T, U> = (f: SyncPipeMapper<T, U>, g: SyncPipeMapper<T, U>) => SyncPipeMapper<T, U>;
type SyncPipe<T, U> = (...fns: SyncPipeMapper<T, U>[]) => SyncPipeMapper<T, U>;
function createSyncPipe<T, U>(): SyncPipe<T, U> {
const syncPipe: SyncPipeReducer<T, U> = (f: SyncPipeMapper<T, U>, g: SyncPipeMapper<T, U>) => (data: T) => g(f(data));
return (...fns: SyncPipeMapper<T, U>[]): SyncPipeMapper<T, U> => fns.reduce(syncPipe);
}
// Example:
function testSyncPipe(num: number): number {
const addOne: SyncPipeMapper<number, number> = (data: number): number => {
return data + 1;
}
const syncPipe: SyncPipe<number, number> = createSyncPipe();
const syncWaterfall: SyncPipeMapper<number, number> = syncPipe(
addOne,
addOne,
addOne,
);
// Does the equivalent of num+3
const lastnumber: number = syncWaterfall(num);
return lastnumber;
}
// AsyncPipe with asynchronous reduction
type AsyncPipeMapper<T, U> = (data: T | U) => Promise<U>;
type AsyncPipeReducer<T, U> = (f: AsyncPipeMapper<T, U>, g: AsyncPipeMapper<T, U>) => AsyncPipeMapper<T, U>;
type AsyncPipe<T, U> = (...fns: AsyncPipeMapper<T, U>[]) => AsyncPipeMapper<T, U>;
function createAsyncPipe<T, U>(): AsyncPipe<T, U> {
const asyncPipe: AsyncPipeReducer<T, U> = (f: AsyncPipeMapper<T, U>, g: AsyncPipeMapper<T, U>) => async (data: T) => g(await f(data));
return (...fns: AsyncPipeMapper<T, U>[]): AsyncPipeMapper<T, U> => fns.reduce(asyncPipe);
}
// Example:
async function testAsyncPipe(num: number): Promise<number> {
const addOne: AsyncPipeMapper<number, number> = async (data: number): Promise<number> => {
return data + 1;
}
const asyncPipe: AsyncPipe<number, number> = createAsyncPipe();
const asyncWaterfall: AsyncPipeMapper<number, number> = asyncPipe(
addOne,
addOne,
addOne,
);
// Does the equivalent of num+3
const lastnumber: number = await asyncWaterfall(num);
return lastnumber;
}
ç§ã¯ã»ãšãã©ã®å Žåããã䜿çšããŸãïŒ
// Pipes with asynchronous reduction
type PipeMapper<T> = (data: T) => Promise<T>;
type PipeReducer<T> = (f: PipeMapper<T>, g: PipeMapper<T>) => PipeMapper<T>;
type Pipe<T> = (...fns: PipeMapper<T>[]) => PipeMapper<T>;
function createPipe<T>(): Pipe<T> {
const pipePipe: PipeReducer<T> = (f: PipeMapper<T>, g: PipeMapper<T>) => async (data: T) => g(await f(data));
return (...fns: PipeMapper<T>[]): PipeMapper<T> => fns.reduce(pipePipe);
}
// Example:
async function testPipe(num: number): Promise<number> {
const addOne: PipeMapper<number> = async (data: number): Promise<number> => {
return data + 1;
}
const pipe: Pipe<number> = createPipe();
const waterfall: PipeMapper<number> = pipe(
addOne,
addOne,
addOne,
);
// Does the equivalent of num+3
const lastnumber: number = await waterfall(num);
return lastnumber;
}
ãããã圹ã«ç«ãŠã°å¹žãã§ãã
@PublicParadiseããŸãã«ãå€ãã®ãã€ã©ãŒãã¬ãŒãïŒp
ç§ã¯ééããªããã®æŒç®åã®ããã€ãã®å€åœ¢ãèšèªã§èŠãããšæããŸãããããã«å¯Ÿããèªèãããå¿ èŠæ§ã¯ãçŸåšã®ECMAScriptã®2ã€ã®ç°ãªãå¶éããæ¥ãŠããŸãã
1ã€ç®ã¯ãåé¿ããã®ãéåžžã«é£ãããèšèªã§å¯ŸåŠããããšããå°é£ã§ããã€ãŸããçµã¿èŸŒã¿ãªããžã§ã¯ããè¡ççãªæ¹æ³ã§æ¡åŒµã§ããªãããšã§ãã
ãã ãã2ã€ç®ã¯èšèªã¬ãã«ã®ãµããŒãããŸã£ããå¿ èŠãšãããå®éã«ä¿®æ£ããããšãã§ããŸããæšæºã©ã€ãã©ãªã¯èŠªåã«è²§è¡ãšåŒã¶ããšãã§ããŸãã
MaximallyMinimalã¯å®å šãªå€±æã§ãã
èšèªã§Array.prototype.flatMap
ãååŸããã®ã«ããªãäœã¶æãäœã¶æãã®è°è«ãå¿
èŠãªã®ã§ããïŒ
ããã¯1ã€ã®æ¹æ³ã§ãããæåããååšããŠããå¿ èŠããããè¿œå ããå¿ èŠãããããšã¯æããã§ãã
ãã¶ãArray.prototype
ã¯6幎以å
ã«groupBy
ã¡ãœãããæã€ã§ãããã
ãããŸã§ã«ãããã«ã¯ããã€ãã®babelã®å®è£ ããããTC39ã®ææ¡ã«æ²¿ã£ãŠåœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ä»ã¯ã¹ããŒãž1ã§ã
ããã§ããã®çŸãããTSã«å ¥ããã£ã³ã¹ã¯ãããŸããïŒ FïŒãšäžèŽããŸãã <3
äŸå€ã¯ãããŸãããããããŒã¶ã«ãTypeScriptãšã¿ã€ãã«ãšã£ãŠ_éèŠ_ã§ããå ŽåãããããŒã¶ã«ã¯éåžžãTypeScriptã®TC39ã¹ããŒãž3ã«å°éãããŸã§å®è£ ãããŸãããããã¯ãããããŒã¶ã«ãååã«å®å®ããŠããªããããé倧ãªç Žæããªã°ã¬ãã·ã§ã³ãçºçããªãããšãä¿èšŒããããã§ãã
ã³ã¢ããŒã ã®èª°ããã®åé¡ã«ã€ããŠãŸã ã³ã¡ã³ãããŠããŸããããã¹ããŒãž3ã®åã«å®è£ ãæ€èšããã®ã«ååãª_éèŠ_ã§ã¯ãªããšæããŸããæãéèŠãªã®ã¯ãTC39ã§ãã£ã³ããªã³ãšææ¡ããµããŒãããããšã§ãã
TSã ãããã®æŒç®åããã€ãã§ã€ãªããªãã·ã§ã³ãæã£ãŠããã°ããã©ã°ã€ã³ãåããbabelããããåŠçã§ããããã«ãªããŸãã
ãŸãã¯ãpost-cssã®ããã«ç¬èªã®æ§æãã©ã°ã€ã³ããããŸããã ããªããã£ãæŒç®åãåŸ
ã€ã®ã«æ°å¹Žãããã®ã¯å€ãããŸãã
@garkin ïŒããã§ã®èª²é¡ã¯ãTSãåå®å šæ§ãæäŸããä»äºãããããã«ã³ãŒããç解ããå¿ èŠãããããšã§ããããã¯ãç解ã§ããªãã©ã³ãã ãªã³ãŒããšããŸãçµã¿åããããŸããã ãã¯ãïŒïŒ4892ïŒãååŸããå Žåãé€ããŠããã¯ããååŸããå Žåã¯ãã³ãŒãã«ã³ã³ãã€ã«ããã ãã§ç解ã§ããŸãã ããããæšæºã©ã€ãã©ãªã®ããªãã®æ°ã®ãããããŸã atmãå ¥åããã®ãé£ããã®ã§ãããŒããããã§ã¯ãŸã ãããæåŸ ããŠããŸããã
Babelãtypescriptãç解ããã®ã§ãBabelãå®è¡ã§ããŸãã
typescript
2017幎10æ26æ¥19:01ããTychoGrouwstraã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
@garkin https://github.com/garkin ïŒããã§ã®èª²é¡ã¯ãTSã
åå®å šæ§ãæäŸãããšãããã®ä»äºãããããã®ã³ãŒããç解ããŸãããããã¯ããŸãã
ç解ã§ããªãã©ã³ãã ãªã³ãŒããšããŸãçµã¿åãããã ååŸããå Žåãé€ããŠ
ãã¯ãïŒïŒ4892 https://github.com/Microsoft/TypeScript/issues/4892 ïŒã
ãã®å Žåãããã¯ãããç解ããã³ãŒãã«ã³ã³ãã€ã«ããã ãã§ãã ããããç§ã¯ããŸãã
æšæºã®ããªãã®æ°ã®ããããšããŠããŸã ããŒããããäžã§ãããæåŸ ããŠãã ãã
ã©ã€ãã©ãªã¯ãŸã atmãå ¥åããã®ãé£ããã§ããâ
ã¹ã¬ãããäœæããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/17718#issuecomment-339748284 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AAZQTO6UiVHbrM6SRwaBhm8obaa3R7e9ks5swMkCgaJpZM4OzVEg
ã
Babelãtypescriptãç解ããã®ã§ãBabelãå®è¡ã§ããŸãã
typescript
ãã«ãæéã®2åïŒp
typescriptãåãªãBabelãã©ã°ã€ã³ã§ããã°ãå¿
èŠã¯ãããŸããã
äž¡æ¹ã®ããã°ã©ã ããã€ãã§ã€ãªã
2017幎10æ26æ¥20:16ããAlexGalaysã [email protected]ã¯æ¬¡ã®ããã«æžããŠããŸãã
Babelãtypescriptãç解ããã®ã§ãBabelãå®è¡ã§ããŸãã
typescriptãã«ãæéã®2åïŒp
â
ã¹ã¬ãããäœæããããããããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/17718#issuecomment-339769856 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AAZQTEArBw8jj0BcZFM2yLj5ErfbtNrgks5swNqagaJpZM4OzVEg
ã
@graingert ïŒæã£ãŠããã®ã¯è¯ããªãã·ã§ã³ã§ããç§ã¯ããã調æ»ããŸãã
æ®å¿µãªãããVisualStudioCodeãWebstormãããã³ãã®ä»ã®IDEã§äœ¿çšãããtypescript Language ServiceAPIã§ã¯æ©èœããŸããã
ãTSãã©ã°ã€ã³ãã«é¢ããŠã¯ãããšãã°ãTSæ§æãç解ããã¹ããŒãã¡ã³ããšåçã®åŒ·ãåãçæãããã€ãæŒç®åçšã®åçŽãªïŒäºåïŒãã©ã³ã¹ãã€ã©ãŒã䜿çšããŠãç®çã®çµæãç°¡åã«éæã§ããŸãã åãã§ãã¯ãªã©ã§åé¡ãªãã³ã³ãã€ã«ã§ããŸãã
ãã®ããã®Webpackæ§æã¯ã次ã®ããã«ãªããŸãã
module: {
rules: [
{ test: /\.ts$/, loader: 'ts-pipe-operator', enforce: 'pre' },
{ test: /\.ts$/, loader: 'ts-loader' },
...
]
}
@garkinãææããŠãã
ãããããTSãµãŒãã¹ã®NFRãäœæããŠïŒãŸãã¯ãã§ã«1ã€ããã®ã§ããããïŒïŒããœãŒã¹ãã¡ã€ã«ãšã³ã³ãã€ã©ã«ãã£ãŒãããããã©ã³ã¹ãã€ã«ãããçµæã®éã«é©çšããã环ç©ãœãŒã¹ãããããµããŒãããå Žåããã®ãã©ã°ã€ã³ãä»ã®ãã©ã°ã€ã³ã¯ãã³ãã¥ããã£ã®æ®ãã®éšåããããŠæãéèŠãªããšãšããŠãã³ã¢ããŒã ã察åŠããããã®è€éããè¿œå ããããšãªãã
ãŸããïŒ13940ãããã«ã©ã®çšåºŠé¢é£ããŠãããã¯ããããŸããããããè€éãªãã©ã°ã€ã³ã«åããè¯ãã¹ã¿ãŒããšãªãããã§ãã ãã ãããããã«ãªïŒãã¬ïŒãã©ã³ã¹ãã€ã©ãŒã¯ã»ãšãã©ã®å Žåãããžã§ã¯ãã³ã³ããã¹ããå¿ èŠãšããªãããããœãŒã¹ãããã¢ãããŒãã¯ããã«åçŽãªä»£æ¿æ段ã§ããããã«æãããŸããçã®ããã¹ããèšè¿°ããå¶åŸ¡ãããŒããã©ã³ã¹ãã€ã«ãããéšåã®ç¹å®ã®I / Oã¿ã€ããæ瀺ã§ããããã«æžãçŽããŸãã
æåŸã«ãªããŸãããããã®çš®ã®ãã©ã°ã€ã³ã«é¢ãã_official_ã¹ã¬ããïŒããå ŽåïŒã誰ãã«æããŠããããŸããïŒ
ç§ã¯ãæ°ããææ¡ãå°å ¥ããç©ãããªæ¹æ³ã«æ¬åœã«æè¬ããFlow + BabelãPost-CSSã®ç¹å¥ãªãã©ã°ã€ã³ãªãªã³ããã¯ãããã¢ããªã·ãã¯ãªTypescriptãšLessCSSããŒã«ãã¯ããã«å¥œããšèšãå¿ èŠããããŸãã
ããã¯ãã«ã¹ã¿ãã€ãºæ§ãšãè¥å€§åããæçåã®ã³ã¹ããšå°éåéã§æ°ããæ©èœãååŸããé床ã§ãã
ãã€ããªãã¬ãŒã¿ãŒã¯ãæ©èœã®äžçãžã®å ¥ãå£ã®è¬ã®ãããªãã®ã§ãå¥åŠãªããšãèšãããŠã»ãããšæããŸãã
ãããã£ãŠãïŒ14419ãããããã§ã«ããã€ãã®æçšãªå®çšçãªæå³ããããŸãã ããããts-loader
ãšçµ±åããã®ã¯é£ããããšã§ã¯ãããŸããã
tsconfig.json
ãã©ã³ã¹ãã©ãŒããŒã®çµ±åïŒããã³ãã«ã¹ã¿ãã€ãºãããtsc
ã ãã§ãªããLanguage Service APIïŒïŒ14654ã¯_çæçã«_æåŠãããŸããã
@PublicParadiseãŸãã¯lodashã®flow
ãŸãã¯Rambdaã®pipe
ãŸããïŒ
ãšã«ãããããã¯TSã§ãµããŒããããŠããã®ãèŠãã®ã¯ãšãŠãçŽ æŽãããã§ãããã JSããµããŒãããæ©èœãã¿ãŒã³ïŒç¹ã«TSã®åæšè«ïŒã¯æ°ã«å ¥ã£ãŠããŸãããäžéšã®ãã¿ãŒã³ã¯ããŸãèªã¿ããããããŸããã RxJSãIxJSã®ãããªå€§ããªTSã©ã€ãã©ãªã¯ããããã¿ã€ãã®æ¡åŒµ/ç¶æ¿ããããã€ã³ãããªãŒã®æ©èœæ§æã«ç§»è¡ããŠãããããããã¯éåžžã«å€§ããªãã®ã«ãªããŸããããã«ãããããªãŒã®æºããšã«ã¹ã¿ã æŒç®åã®ãµããŒããå€§å¹ ã«åäžããŸãã
@felixfbeckerããªãã¯pipe
æå³ããŸããïŒ ããäžåºŠè©Šãå¿
èŠããããŸãããæŽå²çã«ã¯ãramdaã¯JSãã¡ãŒã¹ãã®ã©ã€ãã©ãªã§ãããéåžžã«åçã§å
¥åãé£ããïŒlodashã®ããã«ïŒãTSãé¢æ°ã®æ»ãå€ããæšæž¬ããã®ã«å€ãã®åé¡ãæ±ããŠãããšããäºå®ãå ãã£ãŠããŸãïŒæè¿ä¿®æ£ãããŸãããã確ãã§ã¯ãããŸããïŒ
lodash
ã¯èšèšãäžååã§ã1ã€ã®å€§ããªåå空éã«å¯å€é¢æ°ãšäžå€é¢æ°ãæ··åšããŠããããã䜿çšããŸããã
é¢æ°ãšãã§ãŒã³ãéåžžã«ã¯ã¬ã€ãžãŒã§ãªãå Žåãå®éã«ã¯é©åã«æ©èœããŸãã
ããªãã®é¢æ°ãšãã§ãŒã³ãè¶ ã¯ã¬ã€ãžãŒã§ãªããã°ãããã¯å®éã«ããŸãæ©èœããŸã
ããã§ãè¶
ã¯ã¬ã€ãžãŒã§ã¯ãªãããšèªå®ãããŠãã ãããé¢æ°ã«ãžã§ããªãã¯ãå«ãŸããŠããå ŽåïŒhttps://github.com/types/npm-ramda/issues/86ãåç
§ïŒãããšãã°R.pipe(R.identity)
ãŸãã
ãŸããæ確ã«ããŸããããææ¡ã¯ã¹ããŒãž1ã§ããã³ã¢ããŒã ã¯ãã¹ããŒãž3ã®åã«ç©äºã玹ä»ããããšã«ããã«æ¥ãããããå±ã«ãªã£ãŠããŸãããã³ã¬ãŒã¿ã¯äŸã®äžéšã§ãã ãããã_experimental_ãšããŠããŒã¯ãããŠãããšããŠããç§ãã¡ã¯çå ã«é²ãã§ãã®ãã©ã°ãæå¹ã«ãããããã䜿çšããŠãã¹ãŠã®æ¬çªã³ãŒããäœæããŸããã ææ¡ã¯ä»ãè·³ãè¿ããæ§æãšã»ãã³ãã£ã¯ã¹ã«ããã€ãã®æ ¹æ¬çãªé倧ãªå€æŽããããŸããããã¯ãã³ã¢ããŒã ãã¿ã€ããªç¶æ³ã«çœ®ãã³ãŒãããªãã¡ã¯ã¿ãªã³ã°ããå¿ èŠãããããšãæå³ããŸãã誰ããããããªãªãŒã¹ããæ¥ã«æ§æãå£ããŠããããã¬ã¬ã·ãŒã®ãã®ãä¿æããŠããå Žåãã³ã³ãã€ã©ã®ä»ã®å€æŽã«ãã2ã€ã®æ§æã®ãµããŒããå°é£ã«ãªãå¯èœæ§ããããæçµçã«ã¯å€ããã®ãåé€ãããã®ã§ããããã€.. .ð¥ð¥
ãããã£ãŠããã®ãããªæšæºããŒã¹ã®æ©èœã䜿çšããããã®æåã®æ¹æ³ã¯ãTypeScriptã®ãµããŒãããµããŒãã®æ¬ åŠã«ã€ããŠããã§è°è«ããããšã§ã¯ãªãããã¬ã³ããªãŒãªããŒã«ã«TC39æ åœè ãèŠã€ããŠããã®æ©èœãããªãã«ãšã£ãŠæ¬åœã«éèŠã§ãããåå ããããšãæå±ããããšã§ãã GitHubã§äžèšã«ãªã³ã¯ãããŠããææ¡ã®äŒè©±ã ã»ãã³ãã£ã¯ã¹ãããæ©ã解決ãããã¹ããŒãž3ã«å°éããã®ãããéããªããšãç§ãã¡å šå¡ãããæ©ãçŽ æŽããããã®ãæã«å ¥ããããšãã§ããŸãïŒ
rxjs
ã«lettableæŒç®åãè¿œå ãããã®ã§ãããã¯Typescriptã«ããããã«çŽ æŽãããæ©èœã«ãªããŸãã
https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md
TSããŒã ã®èª°ãã«ããã®ãªã¯ãšã¹ãã«å ãåœãŠãŠãããããšã¯ã§ããŸããïŒ
æã£ãŠããã圌ãã¯ããã«ES Next
ãšSuggestion
ã¿ã°ãä»ããŸãã...ç§ã¯ããªãã«ç« ãåŒçšããESNextã®ææ¡ã«ã€ããŠã³ã¡ã³ãããä»ã®å Žæãšãããããã€ã©ã®ããã«å®è£
ãããã説æããããšãã§ããŸã...
圌ãããã®ã³ã¡ã³ãã¯äœãå€ãããŸããã 圌ãã¯èå°è£ã§å¯ãã«åãçµãã§ããŠãã³ãã¥ããã£ã§ãããçãŸããã®ãåŸ ã£ãŠãããšæããŸããïŒ è¿œå ãããã®ããªãå Žåã圌ãã¯åé¡ã«ã€ããŠå ¥åããªãããšããããããŸã...ãã§ã«èšãããŠããããšã«è¿œå ãããã®ã¯ãããŸããã
ãã®æç¹ã§ãèšèªãæ¡åŒµãããã©ã°ã€ã³ããããšéåžžã«äŸ¿å©ã ãšæããŸãã èšèªã®ã³ã¢ã®äžéšã«ãªããªãæ©èœãè¿œå ãããšããããã®ãã©ã°ã€ã³ã®äžéšã«ãªããŸãã
@aminpaksããã«ããã«ã®å¡ã«ã€ãªããå¯èœæ§ãããããããã®ã¢ã€ãã¢ã¯ããŸã奜ãã§ã¯ãããŸããïŒããã«ã®å¡ã®ããã«ãåªãããã©ã³ã¹ãã€ã©ãŒã®ããã«ã®å¡ã§ã¯ãããŸããðïŒ
ãã©ã°ã€ã³ã¯ã¿ã€ãã¬ãã«ã®åäœãæå³ãããããããã°ã©ã ã®æå³ãç解ããããšã¯å°é£ã«ãªãããœãŒã¹ã¬ãã«ã®äŸåé¢ä¿ãåŠçããã«ã¯ãTypeScriptã«ã¯çŸåšæ¬ ããŠããè€éã§éåžžã«äŸ¿å©ãªæ©èœãå€æ°å¿ èŠã«ãªããŸãã
ãããå¯èœãªéãå¯èœã«ããã®ãšåãããããTSãæ°ããæ©èœãå®è£ ããæšæºã«æºæ ããããã«ãããæ§ãããªã¢ãããŒããåã£ãŠããããšãããããæããŸãã ãã®ã¹ã¿ã³ã¹ã¯ãæšæºããã®éžè±ãæ·±ãæ°ã«ãããŠãããããã©ãŠã¶ãŒãã³ããŒ/ JSãšã³ãžã³ã®æ¡çšã«å ãããŠïŒãã ããå¿ ãããæšæºåã«å ãããŠïŒãã©ã³ã¹ãã€ã«ãæäŸããé«åºŠãªæ©èœã楜ããã§ããç§ã®ãããªäººã ã«ãšã£ãŠãTSãå šäœçã«é åçã«ããŸãã ããã¯åŸ®åŠãªãã©ã³ã¹ãåãè¡çºã§ãã
å人çã«ã¯ãbind-operatorãç ç²ã«ããŠãã€ãã©ã€ã³æŒç®åãæ¯æããããšã¯ãããŸããã ããã¯æ¬åœã«èªã¿ãããã«åž°çããŸãã
äžããããïŒ
function* where<T>(items: Iterable<T>, predicate: (item:T)=>boolean){
for (let item of items){
if(predicate(item)) yield item;
}
}
bind-opïŒ
[1,2,3]::where(x=>x>2)
ãã€ãã©ã€ã³æäœïŒ
[1,2,3]|>(_)=>where(_,x=>x>2)
ts-teamã¯ãã¹ããŒãž3ãŸã§æ°ã«ããªãã§æ£ããã§ãã ãã®å Žåã§ããã¹ããŒãž3ã®ææ¡ã¯åãæ¶ãããšãã§ããŸãïŒSIMDãªã©ïŒã ãã©ã°ã€ã³ãæãŠãªãã®ã¯æ®å¿µã§ãããããªã¹ã¯ãã¯åã
ã®éçºè
ã«æž¡ãããŸãã ãã©ã°ã€ã³ã®ãŠãŒã¹ã±ãŒã¹ã¯ä»ã«ããããããããŸããç¹ã«ãtypescriptãå«ã.vue
ãã¡ã€ã«ãªã©ããµããŒãããå Žå
@MeirionHughesåæããŸãã ç ç³ããŸã£ãã䜿ããªãããããã€ãã©ã€ã³æŒç®åã䜿ãããã®ã§ãããé¢æ°ãèªåã«ã¬ãŒããããããå©çšããŠã©ã€ãã©ãªãæ§ç¯ãããŠããèšèªã«è§ŠçºãããŠããŸãã ãŸãããã€ãã©ã€ã³ã¡ãœããããã€ãã©ã€ã³å€ã®ã¡ã³ããŒã§ã¯ãªãããšãåæãšããŠããŸãã
ã ããããªãã¯
function where<T>(predicate: (item: T) => boolean): (items: Itererable<T>) => Itererable<T> {
return function* () {
for (const item of items) if (predicate(item)) yield item;
};
}
function select<T, R>(projection: (item: T) => R): (items: Itererable<T>) => Itererable<R> {
return function* () {
for (const item of items) yield projection(item);
};
}
ãããŠãããªãã¯æžãã§ããã
[1, 2, 3] |> where(x => x > 2) |> select(x => x ** 2);
ãã ããJavaScriptã¯é¢æ°ãèªåã«ãªãŒåããªããããèªåã«ãªãŒåã§ããªããããã«ãªãŒåã念é ã«çœ®ããŠèšèšãããã©ã€ãã©ãªã§ã®ã¿ããŸãæ©èœããããã§ãã
ç§ã¯ããã«ã€ããŠèª€è§£ãããŠãããããããŸãããç§ã¯ææ¡ã«ã€ããŠããŸãææ°ã§ã¯ãããŸããã
次ã«ãããã©ã«ãã§ã«ã¬ãŒãããutilé¢æ°ãæäŸããæ°ããã©ã€ãã©ãªãæ°ããæšæºã«ãªãå¯èœæ§ããããŸãïŒp
@AlexGalaysãããåæ Œããã°ãããªããšæããŸãã JavaScriptãOCamlã«å€ããããšã¯ç Žå£çãªé°è¬ã®äžéšã§ãªãéãããã¹ãŠãé 調ã§ãã
@MeirionHughesããªãã®äŸã¯æ£ãããããŸããã where
é¢æ°ã¯this
ããŸã£ãã䜿çšããªãããããã€ã³ãæŒç®åã¯æ©èœããŸããã ãã€ã³ãæŒç®åã«ã¯ãåã®å®å
šæ§ã«é¢ããå€ãã®æªè§£æ±ºã®è³ªåããããŸãã where
this
ã¯ãã¯ã©ã¹ã¡ãœããã®ããã«this
ã䜿çšããæå³ã¯äœã§ããïŒ ã¯ãã®å Žåãç§æ財ç£ã®å€æŽã¯çªç¶ãé倧ãªå€æŽãšãªããç§æ財ç£ã®ç®çãå®å
šã«ç¡å¹ã«ããŸãã
ãŸããæ§æãèªã¿ã«ãããšè¿°ã¹ãŠããŸãããããšãã°ãbind-operatorã®äŸã§ã¯èŠªãçç¥ãããã€ãã©ã€ã³ã®äŸã§ã¯äžèŠãªèŠªãè¿œå ããŠããŸãã ãã¡ããããã€ãã©ã€ã³æŒç®åã¯ããã€ã³ãã£ã³ã°çšã«èšè¿°ãããé¢æ°ã§ã¯ãŸã£ããæ©èœããŸããããrxjsæŒç®åãramdaãlodash / fpãªã©ã®ã«ãªãŒåãããé¢æ°ã§ã¯ããŸãæ©èœããŸãã
@aluanhaddadãã¹ãŠã®fpã©ã€ãã©ãªã«å ããŠãRxJSã¯ããããã¿ã€ãã®æŒç®åïŒäž»ã«ããªãŒã®æºãããžã§ããªãã¯åã®å®å šæ§ã«é¢ããŠå€ãã®åé¡ãããïŒããã«ã¬ãŒé¢æ°ãšããŠã®æŒç®åã«ç§»è¡ãããåºã䜿çšãããŠããã©ã€ãã©ãªã®äŸã§ãã ã»ãšãã©ã®ã©ã€ãã©ãªã¯ãããããçŸåšãã®æ¹æ³ãéžæããŠããŸããããªããªããé©åãªæ§æããªãããã§ãã
@felixfbeckerã¯ãã®éãã§ããããã€ããããçµæã®é¢æ°ããã¹ããã@aluanhaddadã®äŸã¯ãç§ã®èããå®å šã«å€ããŸããã
ãã€ãã©ã€ã³ã®ãµããŒããå°ãæ©ãååŸããããã«ãã«ã¹ã¿ã ãã©ã³ã¹ãã©ãŒããŒã«ã€ããŠèããããŸãã¯å®è£ ããŠãã人ã¯ããŸããïŒ èŠãç®ããã¯ããã€ãã©ã€ã³éšåèªäœã«ããã«ãã©ã³ã¹ãã€ã«ãè¿œå ããã ãã®ã«ã¹ã¿ã ãã©ã³ã¹ãã©ãŒããŒãä»ããŠå®è¡ã§ããŸãã ãã®åŸã https ïŒ ãŸãã
ããã¯å¯èœã§ããïŒ TypeScriptsããŒã«ã®ãããªãã®ãæ©èœãããªãããã«ã¹ã¿ã å€æã䜿çšããŠBabelã§ãµããŒããããŠãããµããŒããããŠããæ§æã䜿çšããŸããïŒ
å€åïŒ 0-2ã®ææ¡ã®ã¿ãæ±ãããªã»ããããããŸãïŒ httpsïŒ//github.com/cevek/ttypescript#visual -studio-codeã䜿çšãããšãåé¡ã解決ããå ŽåããããŸãã
@MeirionHughesã圹ã«ç«ãŠãŠããããã§ãâ€ïžã
ããã§ãä»»æã®ãããã¿ã€ãã®ã¡ãœãããã«ãªãŒåãããé¢æ°ã«å€æã§ããããã«ãïŒ6606ãå¿
èŠã«ãªããŸãã
TypeScriptã¯çŸåšãããã«å€æã§ããTypeScriptããã¹ããåã«ããã€ãã©ã€ã³ã§è±ç³ãã·ãŒã±ã³ã¹ããæ¹æ³ãããã¯ãã§ãã ãã ããèšèªãµãŒããŒã§ãããã©ã®ããã«æ©èœããããã¯ããããŸããã
TSïŒ22816ã®ã»ã«ããã¹ãå®è£ ãè¿œå ããŸãã
ãã€ãã©ã€ã³ãªãã¬ãŒã¿ãŒãæšé²ããŠãã人ã®äžäººãšããŠãç§ã¯ããªãã«ãé¡ãããŸãïŒãããããã«é²ããŸã§ãTypeScriptã§ãããå®è£ ããªãã§ãã ããã æ ¹æ¬çã«çžäºã«äºææ§ã®ãªã2ã€ã®æœåšçãªææ¡ã«ã€ããŠã¯ãŸã è°è«äžã§ãããã®ãããTypeScriptã¯ããããå®è£ ããã®ãæ©ããããšãäžçã«èŠçãæ±ããŠããŸãã
ãã®ææ¡ã«èå³ãããå Žåã¯ããã¡ãã®ãªããžããªãã芧ã«ãªããåå ããŠãã ããïŒ //github.com/tc39/proposal-pipeline-operator/ãã£ãŒãããã¯ããåŸ ã¡ããŠããŸãã ãŸããããŸããŸãªææ¡ã«å¯Ÿå¿ããBabelãã©ã°ã€ã³ã«åãçµãã§ãããããïŒTypeScript以å€ã®ïŒãããžã§ã¯ãã§ããããè©Šãæ©äŒããããŸãã
ãããããã®ææ¡ã¯ãŸã TypeScriptã®ãããªãã®ã«çæããæºåãã§ããŠããŸããã
ç§ãã¡ã¯ééããªããããããŒãžããŠããŸããã
https://github.com/babel/babel-eslintã®ããã«ãBabelã§ãµããŒããããŠããæ©èœãåŒãç¶ã䜿çšããTypeScriptã§ãµããŒããããŠããªãæ©èœãåé€ãããåŸã«ã¿ã€ããã§ãã¯ãæ©èœãããããšãã§ããŸããïŒ
@masaeeduã¯ãïŒ ãã®
@MeirionHughesã®éšåé©çšææ¡ã«ãããããç°¡åã«ãªããŸãã
[1,2,3] |> where(?, x=>x>2)
@bernatmv ïŒfwiwããã«è¿ããã®ãä»æ¥æ©èœããŸãã
@ tycho01ããããTypeScriptã§ã¯ãªãã2.8ã®ã¿ã€ãã³ã°ãååŸãããŸã§ã¯ïŒ https ïŒ
@jeremejevs @bernatmvå®éã«ã¯ã R.__
ã¯npm- ramdaã®codegenã䜿çšããŠå
¥åãããŠããŸãã 2.8ã䜿çšããããè¯ãæ¹æ³ãæè¿ããŸãïŒ
ç§ã¯JavascriptãšTypeScriptïŒ2é±éïŒã«å°ãæ
£ããŠããªãã®ã§ããã£ãšç°¡åãªè§£æ±ºçãããã°èš±ããŠãã ããã ãããã以äžã¯ãã€ãã©ã€ã³ãªãã¬ãŒã¿ãŒãããªãå Žåã«ç§ãæãã€ãããã®ã§ãã ç§ã¯ããšããšã2ã3ã4ãªã©ã®ã¿ã€ããã©ã¡ãŒã¿ãŒã§æ©èœããpipe
è€æ°ã®ãªãŒããŒããŒããè©ŠããŠã¿ãŸããããCïŒã®ããã«TypeScriptãªãŒããŒããŒã解決ãæ©èœãããæ¹æ³ãç解ã§ããŸããã§ããã ããŸããŸãªé¢æ°pipe1<A,B>
ã pipe2<A,B,C>
ãããã³pipe3<A,B,C,D>
ã䜿çšã§ããŸãããåŒæ°ã®æ°ã«åºã¥ããŠé¢æ°åãéžæããå¿
èŠãããããããããæäœããã®ã¯å°é£ã§ãã欲ããã£ãã ç§ã以äžã«ææ¡ãããã®ãããåçŽãªã¿ã€ãã»ãŒããªè§£æ±ºçã¯ãããŸããïŒ ç¡å¶éã®ãã©ã¡ãŒã¿ãŒãåãå
¥ããããšãã§ããååž°åå®çŸ©ã¯ãããŸããïŒ æ¡ä»¶ã¿ã€ããé©åã«äœ¿çšããŠããŸããïŒ
type LastOf<
A,
B=never,
C=never,
D=never,
E=never,
F=never,
G=never,
H=never,
I=never,
J=never> =
[B] extends [never] ? A :
[C] extends [never] ? B :
[D] extends [never] ? C :
[E] extends [never] ? D :
[F] extends [never] ? E :
[G] extends [never] ? F :
[H] extends [never] ? G :
[I] extends [never] ? H :
[J] extends [never] ? I :
J;
export function pipe<A, B, C=never, D=never, E=never, F=never, G=never, H=never, I=never, J=never>(
a: A,
mapA: (a: A) => B,
mapB?: (b: B) => C,
mapC?: (c: C) => D,
mapD?: (d: D) => E,
mapE?: (e: E) => F,
mapF?: (f: F) => G,
mapG?: (g: G) => H,
mapH?: (h: H) => I,
mapI?: (i: I) => J
): LastOf<A, B, C, D, E, F, G, H, I, J> {
if (mapB === undefined) {
return mapA(a) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapC === undefined) {
return mapB(mapA(a)) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapD === undefined) {
return mapC(mapB(mapA(a))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapE === undefined) {
return mapD(mapC(mapB(mapA(a)))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapF === undefined) {
return mapE(mapD(mapC(mapB(mapA(a))))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapG === undefined) {
return mapF(mapE(mapD(mapC(mapB(mapA(a)))))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapH === undefined) {
return mapG(mapF(mapE(mapD(mapC(mapB(mapA(a))))))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
if (mapI === undefined) {
return mapH(mapG(mapF(mapE(mapD(mapC(mapB(mapA(a)))))))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
return mapI(mapH(mapG(mapF(mapE(mapD(mapC(mapB(mapA(a))))))))) as LastOf<A, B, C, D, E, F, G, H, I, J>;
}
test("map once", () => {
const result = pipe(
2,
i => i * 10);
expect(result).toBe(20);
});
test("map twice", () => {
const result = pipe(
2,
i => i * 10,
i => `the answer is ${i}`);
expect(result).toBe('the answer is 20');
});
test("map three times", () => {
const result = pipe(
2,
i => i * 10,
i => -i,
i => ({ a: i, b: -i }));
expect(result).toEqual({ a: -20, b: 20 });
});
lodash / fpã®_.flowã¯ããããã§ã«å ¥åããŠãããšæããŸãããïŒ
2018幎5æ9æ¥æ°Žææ¥ã22ïŒ19 jmagaramã notifications @ github.comã¯æ¬¡ã®ããã«æžããŠããŸãã
ç§ã¯JavascriptãšTypeScriptã«å°ãæ £ããŠããŸããïŒ2é±éïŒã®ã§ã容赊ãã ãã
ãã£ãšç°¡åãªè§£æ±ºçãããã°ç§ã«ã ãããã以äžã¯ç§ãæãã€ãããã®ã§ã
ãã€ãã©ã€ã³ãªãã¬ãŒã¿ãŒãããªãå Žåã ç§ã¯ããšããšæã£ãŠã¿ãŸãã
2ã3ã4ãªã©ã®ã¿ã€ãã§æ©èœãããã€ãã®è€æ°ã®éè² è·
ãã©ã¡ãŒã¿ããTypeScriptãªãŒããŒããŒããååŸããæ¹æ³ãç解ã§ããŸããã§ãã
CïŒãšåãããã«æ©èœãã解å床ã ç§ãã¡ã¯ããŸããŸãªæ©èœãæã€ããšãã§ããŸã
pipe1 ãpipe2 ãpipe3ã§ãããããã¯é£ããã§ãããæ°ã«åºã¥ããŠé¢æ°åãéžæããå¿ èŠããããããããªããæãã§ããè°è«ã
ãåãå ¥ããããšãã§ããååž°åå®çŸ©ã¯ãããŸãããã©ã¡ãŒã¿ã®ç¡å¶éã®ã¢ã³ããŒïŒã¿ã€ãLastOf = [B]ã¯[決ããŠ]æ¡åŒµããŸãããïŒ
BïŒ[D]ã¯[決ããŠ]æ¡åŒµããŸãããïŒ
DïŒ[F]ã¯[決ããŠ]æ¡åŒµããŸãããïŒ
æ©èœãã€ãïŒ aïŒAãmapAïŒïŒaïŒAïŒ=> BãmapBïŒ:ïŒ bïŒBïŒ=> CãmapCïŒ:ïŒ cïŒCïŒ=> DãmapDïŒ:ïŒ dïŒDïŒ=> EãmapEïŒ:ïŒ eïŒEïŒ=> FïŒïŒLastOf { const b = mapAïŒaïŒ;ã¹ã€ããïŒmapBïŒ{æªå®çŸ©ã®å ŽåïŒbãLastOfãšããŠè¿ããŸã; ãã£ãã©ã«ãïŒ {const c = mapBïŒbïŒ;ã¹ã€ããïŒmapCïŒ{æªå®çŸ©ã®å ŽåïŒcãLastOfãšããŠè¿ããŸã; ãã£ãã©ã«ãïŒ {const d = mapCïŒcïŒ;ã¹ã€ããïŒmapDïŒ{æªå®çŸ©ã®å ŽåïŒdãLastOfãšããŠè¿ããŸã; ãã£ãã©ã«ãïŒ {const e = mapDïŒdïŒ;ã¹ã€ããïŒmapEïŒ{æªå®çŸ©ã®å ŽåïŒeãLastOfãšããŠè¿ããŸã;ããã©ã«ãïŒmapEïŒeïŒãLastOfãšããŠè¿ããŸã; }}}}}}}}
testïŒ "map once"ãïŒïŒ=> {
const result = pipeïŒ
2ã
i => i * 10ïŒ;
expectïŒresultïŒ.toBeïŒ20ïŒ;
}ïŒ;testïŒ "ãããã2å"ãïŒïŒ=> {
const result = pipeïŒ
2ã
i => i * 10
i =>the answer is ${i}
ïŒ;
expectïŒresultïŒ.toBeïŒ 'çãã¯20'ïŒ;
}ïŒ;testïŒ "map three times"ãïŒïŒ=> {
const result = pipeïŒ
2ã
i => i * 10
i => -iã
i =>ïŒ{aïŒiãbïŒ-i}ïŒïŒ;
expectïŒresultïŒ.toEqualïŒ{aïŒ-20ãbïŒ20}ïŒ;
}ïŒ;â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/17718#issuecomment-387878691 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AAZQTLm6LrWe5KVx4aGBFUd4yRUHkkrZks5tw11cgaJpZM4OzVEg
ã
lodashãèŠããšãããããªãã¯æ£ããã§ã-flowé¢æ°ã¯å€ãã®ãã©ã¡ãŒã¿ãŒãåãå ¥ãã匷ãåä»ããããŠããŸãã Iitã¯çŽç²ãªTypeScriptã§è¡ãããŠããããã«ã¯èŠããŸããã ãããã¯ãã¹ãŠã®ãªãŒããŒããŒãã«åå®çŸ©ãã¡ã€ã«ã䜿çšããŸãã TypeScriptã§ãã¹ãŠãããããšãããããããããè¯ãã®ãæªãã®ãã¯ããããŸããã
@jmagaram all TSã¯ãäžè¬çã«æšè«ã«ããç°¡åã«ãªããŸãããæ©èœããå Žåã¯æ©èœããŸãã
@jmagaramããåçŽãªçŽç²ãªtypescriptã®ä»£æ¿ã¯ã次ã®ããã«ãªããŸãã
interface IPipe<T> {
readonly value: () => T;
chain<R>(fn: (x: T) => R): IPipe<R>;
}
function pipe<T>(val: T): IPipe<T> {
return {
chain: fn => pipe(fn(val)),
value: () => val
};
}
䜿çšæ³ã¯ãŸã ããªãã¯ãªãŒã³ã§åŒ·ãåä»ããããŠããŸãã
pipe(["Hello", "There"])
.chain(map(x => `${x}!`))
.chain(xs => {
...
})
.value()
ã«ã¹ã¿ã æŒç®åãè¿œå ã§ããããšãæ¬åœã«æè¬ããŠããŸãã FïŒã«ã¯ããã®ããã®åªããã¢ãããŒãããããŸãã
ãããŸã§ã®éãã©ããã³ã°ãªãã®ããç°¡åãªã¢ãããŒãã次ã«ç€ºããŸãã
function pipe<T1>(first:T1):T1
function pipe<T1, T2>(first:T1, second:(a:T1) => T2):T2
function pipe<T1, T2, T3>(first:T1, second:(a:T1) => T2, third:(a:T2) => T3):T3
function pipe<T1, T2, T3, T4>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4):T4
function pipe<T1, T2, T3, T4, T5>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4, fifth:(a:T4)=>T5):T5
function pipe<T1, T2, T3, T4, T5, T6>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4, fifth:(a:T4)=>T5, sixth:(a:T5)=>T6):T6
function pipe<T1, T2, T3, T4, T5, T6, T7>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4, fifth:(a:T4)=>T5, sixth:(a:T5)=>T6, seventh:(a:T6)=>T7):T7
function pipe<T1, T2, T3, T4, T5, T6, T7, T8>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4, fifth:(a:T4)=>T5, sixth:(a:T5)=>T6, seventh:(a:T6)=>T7, eigth:(a:T7)=>T8):T8
function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4, fifth:(a:T4)=>T5, sixth:(a:T5)=>T6, seventh:(a:T6)=>T7, eigth:(a:T7)=>T8, ninth:(a:T8)=>T9):T9
function pipe<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(first:()=>T1, second:(a:T1)=>T2, third:(a:T2)=>T3, fourth:(a:T3)=>T4, fifth:(a:T4)=>T5, sixth:(a:T5)=>T6, seventh:(a:T6)=>T7, eigth:(a:T7)=>T8, ninth:(a:T8)=>T9, tenth:(a:T9)=>T10):T10
function pipe(first:any, ...args:Function[]):any {
return (
args && args.length
? args.reduce(
(result, next) => next(result),
first instanceof Function ? first() : first
)
: first instanceof Function ? first() : first
);
}
ããã¯äžããïŒ
ïŒè©³çŽ°ã«ã€ããŠã¯ããã¡ããåç
§ããŠãã ããïŒ
ããã¯èšã£ãŠãã @ graingert +1ããªãã¯æ£ããã§ãïŒlodashã¯ãã§ã«ãããæ§æçšã«æã£ãŠããŸãïŒãã€ãã§ã¯ãããŸããïŒïŒ
const getUpperName =
_.flow(
(p: Person) => `${p.FirstName} ${p.LastName}`,
(s: string) => s.toUpper()
)
ãŸãã¯ã代ããã«Object.prototypeã«ãã€ããè¿œå ããããšãã§ããŸãã
Object.prototype.pipe = function<Self, Result>(this:Self, next:(value:Self) => Result):Result {
return next(this)
}
ããã«ããã代ããã«æ¬¡ã®ããšãå¯èœã«ãªããŸãã
ïŒè©³çŽ°ã«ã€ããŠã¯ããã¡ããåç
§ããŠãã ããïŒ
ãããä»ã®äººã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãïŒ
ããã¯--enable-pipeline-operator
ã³ã³ãã€ã«ãã©ã°ã®äžã§Firefoxã«äžéžããŸããã
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Pipeline_operator
åããè±éããã€ã³ãæŒç®å::
ã®é»ç¥·ã¯ãéªæªãª|>
ãæ¯æããŠéããããŸããð¢
ç§ã¯|>
ã奜ãã®ã§ãããã¯èŠã人ã®ç®ã«ãããšæããŸãïŒD
çã«æåŒïŒ
ãããŠããã§ç§ã¯ããããã€ãã®å€¢ã ãšæã£ã
ãã€ãã©ã€ã³ã¯ãåºæ¬çã«IdentityMonadã®åçŽãªãŠãŒã¹ã±ãŒã¹ã§ãã ãŸãã pipe
ã¯éåžžéã«compose
ãã pipeline
ã¯ããã«åŒã³åºãããpipe
䌌ãŠããŸãã
ãšã«ãããTypescriptã§ãããèŠãã®ã楜ãã¿ã«ããŠããŸãã
ãã€ãã©ã€ã³ããããšäŸ¿å©ã§ãããã³ã³ãã€ã©ãã©ã³ã¹ãã©ãŒããŒãä»ããŠã«ã¹ã¿ã æŒç®åïŒååã«ç¹æ®ãªæåãå«ãŸããå¯èœæ§ããããæåã®ãã©ã¡ãŒã¿ãŒãå·ŠåŽã«ããé¢æ°ïŒãå®çŸ©ããæ©èœãæäŸã§ãããšæããŸãã ç§ãšäžç·ã«ãããè©Šãããšã«èå³ããã人ããŸãã¯ããã«é¢ããèæ¯ããããŸããïŒ
éã2018幎8æ10æ¥ã«ã¯ãåå2æ53åããã¯ã®[email protected]ã¯æžããŸããïŒ
ãã€ãã©ã€ã³ã¯ãåºæ¬çã«IdentityMonadã®åçŽãªãŠãŒã¹ã±ãŒã¹ã§ãã ãŸãã
ãã€ãã¯éåžžéã«æ§æãããŸããããã€ãã©ã€ã³ã¯ãã€ãã®ãããªãã®ã§ã
ããã¯ããã«åŒã³åºãããŸãããšã«ãããTypescriptã§ãããèŠãã®ã楜ãã¿ã«ããŠããŸãã
â
ã³ã¡ã³ãããã®ã§ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/17718#issuecomment-411824741 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AFXUx5rwM9wVrpAkHK2BNYkyy74HtWU5ks5uPGkNgaJpZM4OzVEg
ã
-
äžçœ®é¢æ°ftw
2018幎8æ9æ¥æšææ¥ã23ïŒ35 Ben Beattie-Hoodã notifications @ github.com
æžããŸããïŒ
ãã€ãã©ã€ã³ããããšäŸ¿å©ã§ãããããã¯å¯èœã ãšæããŸã
ã«ã¹ã¿ã æŒç®åïŒååã
ç¹å¥ãªæåãå«ã¿ããã®æåã®ãã©ã¡ãŒã¿ã¯å·ŠåŽã«ãããŸãïŒ
ã³ã³ãã€ã©ãã©ã³ã¹ã ç§ãšäžç·ã«ãããè©Šãããšã«èå³ããã人ããŸãã¯æã£ãŠãã人
ããã«é¢ããããã€ãã®èæ¯ïŒéã2018幎8æ10æ¥ã«ã¯ãåå2æ53åããã¯ã®[email protected]ã¯æžããŸããïŒ
ãã€ãã©ã€ã³ã¯ãåºæ¬çã«IdentityMonadã®åçŽãªãŠãŒã¹ã±ãŒã¹ã§ãã ãŸãã
ãã€ãã¯éåžžéã«æ§æãããŸããããã€ãã©ã€ã³ã¯ãã€ãã®ãããªãã®ã§ã
ããã¯ããã«åŒã³åºãããŸãããšã«ãããTypescriptã§ãããèŠãã®ã楜ãã¿ã«ããŠããŸãã
â
ã³ã¡ã³ãããã®ã§ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
<
https://github.com/Microsoft/TypeScript/issues/17718#issuecomment -411824741
ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
<
https://github.com/notifications/unsubscribe-auth/AFXUx5rwM9wVrpAkHK2BNYkyy74HtWU5ks5uPGkNgaJpZM4OzVEgã
-
â
ããªããèšåãããã®ã§ãããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/17718#issuecomment-411919587 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AAZQTHHFbVY5uGCWl-La_P-HF7UN6xPsks5uPLk8gaJpZM4OzVEg
ã
typescriptã®ã€ã³ãã£ãã¯ã¹é¢æ°ã®èãæ¹ã¯ãtypescriptãšã»ãŒåããããå€ããã®ã§ãïŒ https ïŒ
å€ãã®äººããããæ¬åœã«æªãããšãæãã§ããããšã¯ç¥ã£ãŠããŸãããTypeScriptã¯ãã¹ããŒãž3ã«ãªãéããäœåãªæŒç®åãå®è£ ãã¹ãã§ã¯ãªããšæããŸããç¶æ³ã¯å€ããå¯èœæ§ãããããã¡ããããã€ãã®äŸå€ããããŸãã
ã³ãã¥ããã£ãã¢ã€ãã¢ãæ¢æ±ãã人æ°ã枬å®ã§ããããã«ããããã ãã«ãã³ã³ãã€ã©ãã©ã³ã¹ãã©ãŒããŒãšããŠè©Šã䟡å€ããããšæããŸãã ããã¯ä»ã®é¢æ°åèšèªã§æ確ã«å®çŸ©ãããæ©èœã§ãããããæ¢çŽ¢ããã®ã¯éåžžã«å®å šãããããŸããã
@BenBeattieHoodãããbabelã§å®è£ ããŠããçŸåšã®ææ¡ãå¿ ã確èªããŠãã ããã
ãããã©ã®ããã«äœ¿ããããã«ã€ããŠå€ãã®èããå¿ èŠã ãšæããŸãã ç¹ã«æ¬¡ã®ãããªå ¥åã«é¢ããŠïŒ
function where<T>(predicate: (x: T) => boolean) {
return function* (items: Iterable<T>): Iterable<T> {
for (const item of items) {
if (predicate(item)) {
yield item;
}
}
};
}
[1, 2, 3] |> where(x=>x> 1)
çŸæç¹ã§ã¯where(x => x > 1)([1,2,3])
ã§ã¯ãxãäœã§ããããæšæž¬ã§ããŸããã äžèšã¯ç§ã::
opãåã€ããšãæãã§ããçç±ã®1ã€ã§ãããªããªããïŒäžèŠãããšïŒtypescriptãthis
ãäœã§ããããæšæž¬ããã®ãã¯ããã«ç°¡åã«èŠããããã§ãã
ãŸãã¯ãå¥ã®æ¹æ³ã§èŠãããšãã§ããŸãããªãªãŒã¹ãããå ŽåãTSãæ±ããæšè«ã®åé¡ã®ããã€ããåªå ãããŸãð
ã¹ããã¯ãšããã«ã®ãã¥ãŒã¹ããã©ããŒãããšãã¹ããã¯ã¯ãŸã èšå®ãããŠããŸããã 2ã€ã®ææ¡ããããŸãã ä»æ§ãå®æãããšãã«ãtypescriptããŒã ããµããŒããè¿œå ãããšç¢ºä¿¡ããŠããŸã
äžçœ®é¢æ°ftw
iircJSã¯ãããããã¡ãœããããšåŒãã§ããŸãã
iircJSã¯ãããããã¡ãœããããšåŒãã§ããŸã
@ tycho01ããªãã®ã³ã¡ã³ãã¯ããããé ¬ã®èã§ããããããã¯ãŸã£ããåããã®ã§ã¯ãªããšæããŸãã ãã€ããªé¢æ°ãã©ãããããšã¯ã¹ããŒãããŠã2ã€ã®å€ã«ã€ã³ãã£ãã¯ã¹ã§é©çšããããšã¯ã§ããŸããã å€ãæäœãããã¹ãŠã®é¢æ°ã«é¢ããç¥èã¯ãçŽæ¥ããããã£ãšããŠããŸãã¯ãããã¿ã€ããšããŠãå€èªäœã«ç§»æ€ããå¿ èŠããããŸãã ããã¯å®éã®ã·ããªãªã§ã¯ããªãäžäŸ¿ã§ãã
@BenBeattieHoodãããbabelã§å®è£ ããŠãã
BabelããŒãµãŒã¯ãã¹ããŒããã€ãã©ã€ã³ã®ææ¡ããµããŒãããããã«ãªããŸããã
æŽæ°ã¯ãããŸããïŒ
æŽæ°ã¯ãããŸããïŒ
ð€ŠââïžTypeScriptã¯ãã¹ããŒãž3ã«å°éãããŸã§ææ¡ãå®è£ ããŸããããã€ãã©ã€ã³ãªãã¬ãŒã¿ãŒã¯çŸåšã¹ããŒãž1ã§ãããé倧ãªåé¡ããããŸãã ãã®æ å ±ã¯ããã®ã¹ã¬ããã§è€æ°åæäŸãããŠããŸãã
æ·±å»ãªåé¡ã®äŸããé¡ãããŸããïŒ
â èŠåïŒãã€ãã©ã€ã³æ§æã®è©³çŽ°ã¯çŸåšæªè§£æ±ºã§ãã æ€èšäžã®2ã€ã®ç«¶åããææ¡ããããŸãã
ã¯ããããã¯ç§ãæ·±å»ãªåé¡ã ãšèããŠããããšã§ãã
Waiting for TC39ã¹ããŒã¿ã¹ã®ãã¹ãŠã®ã¹ã¬ããã¯åããããããããã¯ããŸãã
pingïŒ
æãåèã«ãªãã³ã¡ã³ã
ä»ã¯ã¹ããŒãž1ã§ã