TypeScript1.7.3ã®äœ¿çšã
以äžã®npmããã±ãŒãžããããšããŸãã
宣èšãã¡ã€ã«ã¯TypeScriptã³ã³ãã€ã©ã«ãã£ãŠçæãããããã§èª¬æããæ¹æ³ã§ä»ã®ããã±ãŒãžããåç
§ãã
ts srcïŒ
export default class ClassA {
private foo: string;
bar: number;
}
ts宣èšïŒ
declare class ClassA {
private foo;
bar: number;
}
export default ClassA;
ts srcïŒ
import ClassA from 'package-a';
namespace ClassAFactory {
export function create(): ClassA {
return new ClassA();
}
}
export default ClassAFactory;
ts宣èšïŒ
import ClassA from 'package-a';
declare namespace ClassAFactory {
function create(): ClassA;
}
export default ClassAFactory;
ts srcïŒ
import ClassA from 'package-a';
import ClassAFactory from 'package-b';
let classA: ClassA;
classA = ClassAFactory.create(); // error!!
æåŸã®è¡ã¯ã³ã³ãã€ã«äžã«ãšã©ãŒãåŒãèµ·ãããŸãïŒ
error TS2322: Type 'ClassA' is not assignable to type 'ClassA'.
Types have separate declarations of a private property 'foo'.
package-aã®å®£èšããprivate foo;
è¡ãåé€ããŠããTypeScriptã¯ãšã©ãŒãåºåããŸããã
ãã ãããã®åé¿çã¯å°ãé¢åã§ãã
ãã©ã€ããŒãããããã£ã宣èšã«å
¬éããã®ã¯ä»æ§ã«ãããã®ã§ããããšãç解ããŠããŸãïŒhttps://github.com/Microsoft/TypeScript/issues/1532ïŒã
TypeScriptã¯ãå€æ°ã®å²ãåœãŠãã³ã³ãã€ã«ãããšãã«ãã©ã€ããŒãããããã£ãç¡èŠããå¿
èŠããããšæããŸãã
ãŸãã¯ãããã«å¯Ÿããããè¯ãåé¿çã¯ãããŸããïŒ
ããã«ã¯ClassA
ã«ãŒã宣èšã1ã€ãããªãããããã®ãšã©ãŒã¯çºçããŸããã
ç³ãèš³ãããŸããããããã¯npm link
é¢é£ããŠããããšãããããŸããã
npm link
ã䜿çšãããšãã·ã³ããªãã¯ãªã³ã¯ãäœæãããã ããªã®ã§ãããã±ãŒãžã¯æ¬¡ã®ããã«ã€ã³ã¹ããŒã«ãããŸãã
package-c
|
-- node_modules
|
-- package-a
| |
| -- index.d.ts
| |
| ...
|
-- package-b
|
-- index.d.ts
|
-- node_modules
| |
| -- package-a
| |
| -- index.d.ts
| |
| ...
|
...
瀺ãããŠããããã«ãpackage-aã«ã¯2ã€ã®ç°ãªã宣èšãã¡ã€ã«ãããããã«èŠããŸãã
npm install
ã䜿çšããŠéåžžã©ããããã±ãŒãžãã€ã³ã¹ããŒã«ããå Žåããã®å Žåãpackage-aã®å®£èšãpackage-bã«å«ãŸããŠããªããããããã¯çºçããŸããã
ãšã«ããããã«å¯Ÿããäœããã®è§£æ±ºçãããããšãé¡ã£ãŠããŸãããããã¯é£ãããåªå 床ãäœããããããŸããã
æçµçã«npm link
ã䜿çšããªããªããŸããããããã¯ç§ã«ãšã£ãŠããåé¡ã§ã¯ãããŸããã
ååã«å ¬å¹³ã§ãããä»ã®èª°ããïŒwinkïŒ
å®éã«ã¯ãClassAã®å®£èšã2ã€ãã2ã€ã®ãã¡ã€ã«ããã£ã¹ã¯äžã«ãããŸãã ãããã£ãŠããšã©ãŒã¯æ£ããã§ãã ãã ãããããã®ã¿ã€ããæ¯èŒãããšãã¯ãããŒãã¢ãžã¥ãŒã«ãèæ ®ããå¿ èŠããããŸãã ãã®åé¡ã¯ä»¥åã«https://github.com/Microsoft/TypeScript/issues/4800ã§å ±åãããŠãããåæåã®å Žåãã«ãŒã«ãååç®ãã§ãã¯ã«å€æŽããŸããã ããããã¯ã©ã¹ã«ã€ããŠãåãããšãããŸãã
NPMã«ãªã³ã¯ããããã¹ãŠã®é¢é£ããã±ãŒãžãåããTS1.7.5ã§ããã+1ããŸãã åé¡ã瀺ããã¹ãã±ãŒã¹ãäœæããããšããŸããããã§ããŸããã§ããã äœãè©ŠããŠããã¢ããªã±ãŒã·ã§ã³ã§TS2345ã§å€±æããã·ããªãªã§ã¯ãTSã¯åé¡ãããŸããã§ãããç§ãç¥ãéããåé¡ã®ãã.d.tsãã¡ã€ã«ã®ãã¹ãŠã®ã³ããŒã¯åããã¡ã€ã«ãžã®ã·ã³ããªãã¯ãªã³ã¯ã§ãã£ããããååšããªãã¯ãã§ããã¿ã€ãå ã§ç°ãªã宣èšãè¡ãããŠããŸãã ãã ããTypescriptã«ãã£ãŠçºè¡ããããšã©ãŒãã2ã€ã®äºææ§ã®ãªãã¿ã€ãã宣èšãããã¡ã€ã«ãåç §ããŠããå Žåã¯ãç§ãèæ ®ããŠããªãããšã«å ãåœãŠãå¯èœæ§ãããããã䟿å©ã§ãã çŸåšã2ã€ã®å®çŸ©ããããšæžãããŠããŸãããéçºè ãåé¡ãç¹å®ããã®ã«åœ¹ç«ã€ããšã¯äœããããŸããã
åé¿çãšããŠã競åããåŒã§<any>
ããŠãåãã§ãã¯ãã¹ãããã§ããŸãã æããã«ããããŸã§ã¯å¿
èŠãªãã£ããããããªãå¥ã®å泚éãè¡ãå¿
èŠããããããããŸããã 誰ãããã®åé¡ããã€ãåãåããããšãã§ãããšããã®ã§ããã
ç·šéïŒç§ã®å ŽåãNPMãªã³ã¯ãæ©èœããŠããããšãæ確ã«ããŸãã
TS 1.8ãå©çšå¯èœã§ãããã¢ããã°ã¬ãŒããããŠããããã®ããŒãžã§ã³ã§ãåé¡ãçºçããŠããããšã«æ³šæããŠãã ããã
ãã®åé¡ã®åæãšææžåã«ãå°œåããã ããããããšãããããŸãã äžéšã®ã³ãŒãããŒã¹ã§ãåãåé¡ãçºçããŠããŸãã package.json
äŸåé¢ä¿ãé©åã«äœ¿çšããããã«ããã€ãã®ãããžã§ã¯ãã移æ€ããŸããããéçºäžã«npm link
ã䜿çšãããšããããçºçããããã«ãªããŸããã
ãã®åé¡ã解決ããããã«ç§ãå©ããããšãã§ãããã®ã¯ãããŸããïŒ
ããã±ãŒãžãã·ã³ããªãã¯ãªã³ã¯ããLernaã䜿çšããŠããŠãããã§ãåé¡ãçºçããŠããŸãã TypescriptããŒãžã§ã³2.0.3ã
æ®å¿µãªãããLernaãšãã®ã·ã³ããªãã¯ãªã³ã¯ã¯å³ããèŠä»¶ã§ããããããã®åä»ãªåé¿çã䜿çšããŠãã³ã³ã·ã¥ãŒããŒãé©åã«åãã§ãã¯ã§ããäžæ¹ã§ããããæ£åžžã«ã³ã³ãã€ã«ã§ããããã«ããŸããã
export class MyClass {
constructor(foo: Foo) {
(this as any)._foo = foo;
}
get foo() {
return (this as any)._foo as Foo;
}
}
ã¯ã©ã¹ã¯éåžžã«å°ããã®ã§ãããã»ã©é£ããããšã§ã¯ãããŸããã§ãããå®éã«å€æŽãããããšã¯ãªããšæããŸãããã®ãããããã¯èš±å®¹ã§ããåé¿çã§ãããšèããŠããŸãã
åèãŸã§ã«ã npm link
ã䜿çšããŠãã®ãšã©ãŒãçºçããçµæãããã«å°éããŸããã 誰ããããã®åé¿çãèŠã€ããŸãããïŒ
@xogenyã¯ãnpmãªã³ã¯ããã®åé¡ãã©ã®ããã«åŒãèµ·ãããŠãããã«ã€ããŠè©³ãã説æã§ããŸããïŒ
@mhegazyããŠãäžèšã®ãããªãšã©ãŒãçºçãå§ããŸããïŒãã ãã rxjs
ããObservable
ã䜿çšããŠããå Žåãã€ãŸãããã¿ã€ã 'Observable'ã¯ã¿ã€ã 'Observable'ã«å²ãåœãŠãããŸããïŒããã¡ãããäž¡æ¹ã®ã¢ãžã¥ãŒã«ã§ãŸã£ããåãããŒãžã§ã³ã®rxjs
ããObservable
ãåç
§ããŠãããããå¥åŠã«æããŸãããããããã¿ã€ãããäžèŽãããå Žåããšã©ãŒãçºçããŸãããæçµçã«ã @ kimamulaãnpm link
ã䜿çšãããšããã®ãšã©ãŒãçºçããããšãrxjs
åç
§ããã®ã§ã¯ãªãã1ã€ã®ã¢ãžã¥ãŒã«ã§å¿
èŠã§ãïŒã
ããã¯ããªãã®è³ªåã«çããŸããïŒ ç§ã®ã±ãŒã¹ã¯ããã®ä»ã®ã±ãŒã¹ãšäœãå€ãããªããšæãã®ã§ããããããªãã«åœ¹ç«ã€ãã©ããã¯ããããŸããã
ç¹ã«npm link
ã·ããªãªãæå¹ã«ããããã«TS2.0ã§äœæ¥ãè¡ããŸããïŒhttps://github.com/Microsoft/TypeScript/pull/8486ããã³ïŒ8346ãåç
§ïŒã npmãªã³ã¯ããŸã æ©èœããŠããªãå Žæã確èªã§ãããµã³ãã«ã¯ãããŸããïŒ
ãããšã 2.0.3ãå®è¡ããŠããŸãïŒç¢ºèªããŸããïŒã åçŸå¯èœãªã±ãŒã¹ãäœæããŠã¿ãŸãã
ã¡ãªã¿ã«ããããã®ã¹ã¬ããã¯TS 2.0ã®æç¹ã§ããŸã åé¡ã§ãããšç€ºåããŠããããããã©ããŒã¢ããããå¿ èŠããããŸãã
https://github.com/ReactiveX/rxjs/issues/1858
https://github.com/ReactiveX/rxjs/issues/1744
Lernaãªããžããªã§èŠãããåé¡ã¯å€å°é¢ä¿ããŠããã®ã§ã httpsïŒ//github.com/seansfkelley/typescript-lerna-webpack-sadnessã§ãã®ã ããã¯webpack / ts-loaderã®ãããããããªãã®ã§ãç§ã¯ããã«ãhttps://github.com/TypeStrong/ts-loader/issues/324ãæåºããŸããã
typescript 2.0.3ã䜿çšããŠããŸãããäžèšã®ããã«Observableã§ãã®ãšã©ãŒã衚瀺ãããŸãã
Type 'Observable<Location[]>' is not assignable to type 'Observable<Location[]>'. Property
'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
ç§ã¯ãããLernamonorepoããã±ãŒãžã§ããããããŠããŸãã åã·ã¹ãã ã®ãã¹ãŠã§ã¯ãããŸããããã»ãšãã©ã®éšåãå®ãã¹ã䜿çšããŠãã¡ã€ã«ãäžæã«èå¥ããããã«æããŸãã å®ãã¹ã§ã¯ãªãã·ã³ããªãã¯ãªã³ã¯ãã¹ã䜿çšããŠãããã©ã³ããäžã«ç§»åãããšãã¿ã€ãã¯åãã§ããç°ãªãããšã«ãªããŸãã
ããã¯ããªãæ®é ·ãªåé¡ã§ãããããè€éãªã³ãŒãããŒã¹ã«ã®ã¿åœ±é¿ããææ¬çãªå¯Ÿçãè¬ããã«åé¿ããããšã¯äžå¯èœãšæãããã®ã§ãããã«å€ãã泚æãæãããã«çããã説åŸã§ããã°å¹žãã§ãã ð
ããã¯ãäŸåé¢ä¿Aã«äŸåããã¢ããªããããäŸåé¢ä¿AãäŸåé¢ä¿Bã«äŸåããäŸåé¢ä¿Bã®ã¿ã€ããå«ããªããžã§ã¯ããnpm link
ããå Žåã«æãé¡èã«ãªããŸããã¢ããªãšäŸåé¢ä¿Aã¯äž¡æ¹ãšã
ããã«ãããæ·±ããšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸããã©ã€ãã©ãªå
ã®ãã¹ãŠã®private
protected
ããããã£ãš
TSError: ⚯ Unable to compile TypeScript
tests/helpers/test-application.ts (71,11): Argument of type '{ initializers: Initializer[]; rootPath: string; }' is not assignable to parameter of type 'ConstructorOptions'.
Types of property 'initializers' are incompatible.
Type 'Initializer[]' is not assignable to type 'Initializer[]'.
Type 'Application.Initializer' is not assignable to type 'Application.Initializer'.
Types of property 'initialize' are incompatible.
Type '(app: Application) => void' is not assignable to type '(app: Application) => void'.
Types of parameters 'app' and 'app' are incompatible.
Type 'Application' is not assignable to type 'Application'.
Types of property 'container' are incompatible.
Type 'Container' is not assignable to type 'Container'.
Types of property 'resolver' are incompatible.
Type 'Resolver' is not assignable to type 'Resolver'.
Types of property 'ui' are incompatible.
Type 'UI' is not assignable to type 'UI'.
Property 'logLevel' is protected but type 'UI' is not a class derived from 'UI'. (2345)
ãããæ€èšããŠããçããã«æ¬åœã«æè¬ããŸãã ããããšãããããŸããïŒ
@tomdaleã¯ãWebpackã tsc
ãŸãã¯å¥ã®ãã«ãããŒã«ã䜿çšããŠããŸããïŒ ç§ã®åé¡ã¯ãWebpackãä»ããŠã³ã³ãã€ã«ãããå Žåã«ã®ã¿çºçããããã§ãïŒä»¥åã®ã³ã¡ã³ãã®ãªã³ã¯ããããªããžããªãåç
§ããŠãã ããïŒã
@seansfkelleyhttpsïŒ//github.com/TypeStrong/ts-nodeã®ããã«èŠããŸãã
ããã§ãã ts-node
ïŒã«ãŒãã¢ããªã±ãŒã·ã§ã³çšïŒã䜿çšããŠããŸãã ãã ããäŸåé¢ä¿ã¯tsc
ã³ã³ãã€ã«ãããããã±ãŒãžã§ãã
ç§ã¯ã¡ããã©ãã®åé¡ã«ééããŸããããããŠããã¯ç§ãã¡ã«ãšã£ãŠå€§ããªåé¡ã§ãããªããªãç§ãã¡ã¯ããã¯ãšã³ããå€ãã®å°ããªã©ã€ãã©ãªã«åå²ããããšããããã§ãã éçºäžããªããžããªãnpmãªã³ã¯ããå¿ èŠãããããšããããããŸãã ç§ãééããç¹å®ã®åé¡ã¯ããããèŠã€ããããã«ä¿ããŸããããrxjsObservablesãšã€ã³ã¿ãŒãã§ã€ã¹ã®äœ¿çšã§ãã
// in repo A
export class HttpAdapter {
request(url: string, options?: HttpRequestOptionsArgs): Observable<HttpResponse> {
return Observable.of({});
}
}
// in repo B
export class HttpRequestAdapter implements HttpAdapter {
request(url: string, options?: HttpRequestOptionsArgs): Observable<HttpResponse> {
return Observable.of({});
}
}
ããã¯ã npm link
ãå®è¡ããªãå Žåã¯æ©èœããŸãããå®è¡ãããšã次ã®ããã«ãªããŸãã
Error:(10, 14) TS2420:Class 'HttpRequestAdapter' incorrectly implements interface 'HttpAdapter'.
Types of property 'request' are incompatible.
Type '(url: string, options?: HttpRequestOptionsArgs) => Observable<HttpResponse>' is not assignable to type '(url: string, options?: HttpRequestOptionsArgs) => Observable<HttpResponse>'.
Type 'Observable<HttpResponse>' is not assignable to type 'Observable<HttpResponse>'.
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
ç§ãã§ããå¯äžã®ææ¡ã¯ã private
ãé¿ããããšã§ãã ãã®åé¡ã®ããã private
ããã±ãŒãžã¯å
¬éããã代ããã«JavaScriptã¹ã¿ã€ã«ã®_
ãã¬ãã£ãã¯ã¹ã䜿çšããŸãã ç§ã¯https://github.com/Microsoft/TypeScript/issues/7755ã§ããã«ãŸããããã¯ã private
ãæ§é çã§ã¯ãªãèšåçåã·ã¹ãã ã«å
¥ãçç±ã«ã€ããŠã®åæ§ã®è°è«ã§ããããããã£ãŠç§ã®äžã§ãããçŠæ¢ããŸããããŒãžã§ã³ã®éããçºçãããããããç¬èªã®ãããžã§ã¯ãïŒNPM 2ãnpm link
ïŒã
@blakeembreyã¯ããã©ã€ããŒããé¿ãããšèšããšããã³ãŒãå ã®äœããå€æŽã§ããããšãææ¡ããŠããŸããïŒ Observableåã®å®çŸ©ãåé¡ã ãšæããŸãããïŒ
@jeffwhelpleyã¯ããç³ãèš³ãããŸããããããªãã®ããã§ã¯ãããŸããã Observable
ã§ãã æ®å¿µãªãããåé¿private
ã¢ããã€ã¹ã¯éåžžã«ã¹ãªã ã§ãå®å
šã«ã¯åœãŠã¯ãŸããŸããã§ããð private
䜿çšã«ã€ããŠrxjs
åé¡ãçºçããå¯èœæ§ããããŸããããªãã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«private
ïŒ
ç·šéïŒç§ã¯ä»¥åã«åé¡ããã©ããŒããèªåã®çµéšã«åå ããããšãé¿ããã®ã§ãã»ãšãã©ã³ã¡ã³ãããŸãããã httpsïŒ//github.com/Microsoft/TypeScript/issues/ã«äŒŒãŠãã代ããã«ãèªåã®èããããäžåºŠæžãçããããšãã§ãããšèããŸãã@tomdaleãprivate
ãšprotected
åé€ããããšãææ¡ããŠããå Žåãç§ã¯ãã°ããåã«åãããšãããŸããïŒã
@mhegazyããã npm link
åé¡ã¯ãªããšæãããšããå°è±¡ãåããŸããã ããããããã§ãç§ãã¡ãä»ã®äººã
ãæ©ãŸããŠããããã§ãã ã ããç§ã¯ãã®åé¡ãã©ãã«ããã®ãããããŸãããïŒ TS 2.0+ã§èªèãããŠããåé¡ã§ããããããšãã©ããã§åé¿çããããŸãããïŒïŒïŒ
ãããšåãåé¡ãçºçããŠããŸããã npm link
ãåå ã§ã¯ãªãããã§ãã npm install file.tar.gz
ã䜿çšããŠã€ã³ã¹ããŒã«ãããšããŸã ååŸã§ããŸãã ãšã©ãŒã¯æ¬¡ã®ãšããã§ãã
app/app.component.ts(46,5): error TS2322: Type 'Observable<boolean | Account>' is not assignable to type 'Observable<boolean | Account>'.
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
ç§ã®app.component.ts
ã¯æ¬¡ã®ããã«ãªããŸãã
export class AppComponent implements OnInit {
private user$: Observable<Account | boolean>;
private loggedIn$: Observable<boolean>;
private login: boolean;
private register: boolean;
constructor(public stormpath: Stormpath) {}
ngOnInit() {
this.login = true;
this.register = false;
this.user$ = this.stormpath.user$;
this.loggedIn$ = this.user$.map(user => !!user);
}
this.user$
è¡ã«ã€ããŠäžå¹³ãèšã£ãŠããŸãã Stormpath
ã¯ã次ã®ããã«å®çŸ©ãããuser$
ããããŸãã
@Injectable()
export class Stormpath {
user$: Observable<Account | boolean>;
@xogenyå¥åŠãªããšã«ãç§ã®ç解ã§ã¯ãå®çŸ©IDã¯ãã¡ã€ã«ã®å Žæã«é¢é£ä»ããããŠããŸãããã€ãŸãã npm link
ã䜿çšãããšåžžã«åé¡ãçºçããŸãïŒ npm link
edäŸåé¢ä¿ã«ã¯ç¬èªã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ãããããïŒ ã ããããå®çŸ©IDãå€æŽãããŸãã-ãã¡ã€ã«ããã·ã¥ã䜿çšããããšã¯TypeScriptã®è¯ãåé¿çãããããŸããã æ®å¿µãªãããJavaScriptã§ã¢ãžã¥ãŒã«ãéè€ããããã«ãªãã«ã¯ãããŸããŸãªæ¹æ³ããããŸãïŒGitHubã®npm install
ã npm install
ãæåã¯ããŒã³ãããŒãžã§ã³ã®ç«¶åã«ãããåãããŒãžã§ã³ãç°ãªãå Žæã«å°éããå¯èœæ§ããããŸããããŒãã®ã¢ãžã¥ãŒã«è§£æ±ºã¢ã«ãŽãªãºã ãã©ã®ããã«æ©èœããããªã©ïŒã
@blakeembreyããããã ãããããã®åŸãäœã ã£ãããã«ã€ããŠã¯ïŒ
泚æããŠãã ãããç§ã¯æå¥ãèšã£ãŠããŸããã ç§ã¯ããã解決ããããšããåžæããããã©ãããç解ããããšããŠããŸãã @jeffwhelpleyãèšåãããã¹ãŠã®çç±ãããããã¯ç§ãã¡ã®åŽã«ãšã£ãŠæ·±å»ãªæ£ã§ãã
@xogenyç§ãè©ŠããŠããŸãããæ£ãã解決ãããããšãæãã§ããŸãðãªã³ã¯ãããåé¡ãèªã¿ãŸãããã2ã€ã®ïŒå®éã®ïŒãã¡ã€ã«ããããã©ãããæå³ããã·ã³ããªãã¯ãªã³ã¯ã®ãªã¢ã«ãã¹ã解決ããããã«èšèšãããŠããŸãç°ãªãå Žæã«è§£æ±ºããããããåŒãç¶ã競åããŸãã ããã¯ããããããžã§ã¯ãããå¥ã®ãããžã§ã¯ãã«npm link
ãå®è¡ãããšãäž¡æ¹ã«ç¬èªã®äŸåé¢ä¿ãããã npm link
edããã±ãŒãžããåãšã¯ã¹ããŒããããã·ã³ãã«ãšã¯ç°ãªãå¯èœæ§ãããããã§ãã
ç·šéïŒç¢ºèªã§ããŸãããã¹ãŠã®åé¡ã¯2ã€ã®ãã¡ã€ã«ãåå ã§ãã npm link
ã¯ããªã³ã¯ãããããžã§ã¯ããšåãäŸåé¢ä¿ã§ããããªã³ã¯ããã°ããã®ãªããžããªã«äŸåé¢ä¿ãèšå®ããã®ãç°¡åãªãããããªã¬ãŒãããŸãã ç°¡åãªåçŸã¯ãã¢ããªã±ãŒã·ã§ã³ã®2ã€ã®ç°ãªãã¬ãã«ã§åãäŸåé¢ä¿ã®npm install
ãå®è¡ãããããããšã©ãŒã«ãªãã®ãç£èŠããããšã§ãã
ãã®ã¹ã¬ããããã©ããŒããŠãã人ã«ã¯...ããã§èª¬æã
ãã®ãšã©ãŒãåçŸããŸããã
mkdir a; cd a
npm install rxjs
echo 'import * as rx from "rxjs"; export const myObservable: rx.Observable<number>;' > index.d.ts
echo '{ "name": "a" }' > package.json
cd ..; mkdir b; cd b
npm install rxjs
npm link ../a
echo 'import * as rx from "rxjs"; import * as a from "a"; const x: rx.Observable<number> = a.myObservable;' > index.ts
tsc index.ts --target es6 --moduleResolution node
rxjs
ã«ã¯2ã€ã®ã€ã³ã¹ããŒã«ãããããã次ã®ããã«ãªããŸãã
index.ts(1,59): error TS2322: Type 'Observable<number>' is not assignable to type 'Observable<number>'.
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
ã³ãã³ãã©ã€ã³ã«æé©ãªåé¿çããããŸãããVisual Studioã¯ãŸã ãã¹ãŠæ··ä¹±ããŠããŸãïŒ https ïŒ
Windows + Visual Studio 2015ã®æ°ããåé¿çã¯ã xlib
ã©ã€ãã©ãªsrc
ããã³dist
ãã©ã«ããŒãnode_modules\xlib\src
ããã³node_modules\xlib\dist
ãã©ã«ããŒã«robocopyããããšã§ããæ¶è²»ãããžã§ã¯ãã®ã
誰ãããããæããªãããããç§ã®robocopyããããã¡ã€ã«ã¹ã¯ãªããã®éèŠãªéšåã§ãïŒ
:rerunloop
<strong i="14">@echo</strong> watching for changes to project files.............. (Ctrl-C to cancel)
<strong i="15">@rem</strong> xlib --> blib and slib
<strong i="16">@robocopy</strong> .\xlib\src .\blib\node_modules\xlib\src *.* /MIR /NJH /NJS /NDL /XD .git
<strong i="17">@if</strong> NOT "%errorlevel%" == "0" (
<strong i="18">@rem</strong> copy occured, so copy both
<strong i="19">@robocopy</strong> .\xlib\dist .\blib\node_modules\xlib\dist *.* /MIR /NJH /NJS /NDL /XD .git
<strong i="20">@robocopy</strong> .\xlib\src .\slib\node_modules\xlib\src *.* /MIR /NJH /NJS /NDL /XD .git
<strong i="21">@robocopy</strong> .\xlib\dist .\slib\node_modules\xlib\dist *.* /MIR /NJH /NJS /NDL /XD .git
<strong i="22">@rem</strong> set the src dirs readonly
<strong i="23">@attrib</strong> +R .\blib\node_modules\xlib\src\* /S /D
<strong i="24">@attrib</strong> +R .\slib\node_modules\xlib\src\* /S /D
)
<strong i="25">@timeout</strong> /t 1 /nobreak > NUL
<strong i="26">@goto</strong> rerunloop
ãã®åé¡ã§åã³ãã°ãå ±åããŠç³ãèš³ãããŸããããå€æŽãå ããŠããéããããžã§ã¯ããnpm link
ãå®è¡ã§ããªãããšã¯æ·±å»ãªåé¡ã§ãã çŸåšã®TypeScriptå¯çš¿è
ã®1人ããã³ãŒãããŒã¹ã®ã©ããã調ã¹å§ãããã«ã€ããŠå°ãã¬ã€ãã³ã¹ããããããPRãæäŒããããšæããŸãã
ç§ãããã«èŠåŽããŠããŸãã å°ããªã¢ããªããå§ããŠTSãæ¡çšããŸããããä»ã§ã¯ãµãã¢ãžã¥ãŒã«ã«åå²ããŠãªã³ã¯ããâŠBOOMã TSã¯ããã³ã³ãã€ã«ãããŸããã ããã¯ãŸã ãã¹ãŠã®TSdist-tagsã®åé¡ã§ããïŒ ç§ã¯çŸåš@rc
ïŒ2.1.1ïŒã§ãããçµéšããŠããŸãã
@heruanãš@jeffwhelpleyã§typescript@next
ãè©ŠããŠã¿ãŠãã ãããããã€ãã®é¢é£ããåé¡ãä¿®æ£ããŸããã ããã§ãåé¡ãçºçããå Žåã¯ããããžã§ã¯ãã®èšå®ã«é¢ãã詳现æ
å ±ãæäŸããŠãã ããã
@mhegazyç§ã¯Version 2.2.0-dev.20161129
ã䜿çšããŠããŸããããŸã åé¡ãçºçããŠããŸãã ç¹å®ã®åé¡ã¯ã次ã®ããã«ãã€ã³ã¿ãŒãã§ã€ã¹ãïŒã¯ã©ã¹ã䜿çšããŸãããã¯ã©ã¹ãAngular 2 DIã®ããŒã¯ã³ãšããŠäœ¿çšã§ããããã«ããããïŒãå«ã1ã€ã®ãããžã§ã¯ãïŒProjectAãšåŒã³ãŸãïŒãããããšã§ãã
export class ServerAdapter {
start(opts: ServerOptions): Observable<any> {
return null;
}
}
次ã«ã次ã®ãããªæåã®ãããžã§ã¯ãããã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ããã¯ã©ã¹ãæã€å®å šã«å¥ã®ãããžã§ã¯ãïŒProjectBãšåŒã³ãŸãããïŒã§ïŒ
export class RestifyServerAdapter implements ServerAdapter {
start(opts: ServerOptions): Observable<any> {
let server = restify.createServer();
this.addPreprocessors(server);
this.addRequestHandler(server, opts);
return this.startServer(server, opts);
}
// more stuff here that is not relevant to this issue
}
ProjectBã®éåžžã®typescriptã³ã³ãã€ã«ãå®è¡ãããšãæ£åžžã«æ©èœããŸãã ããããProjectBã«ãŒããã£ã¬ã¯ããªããnpm link ProjectA
ãããããäžåºŠtsc
å®è¡ãããšã次ã®ããã«ãªããŸãã
Types of property 'start' are incompatible.
Type '(opts: ServerOptions) => Observable<any>' is not assignable to type '(opts: ServerOptions) => Observable<any>'. Two different types with this name exist, but they are unrelated.
Type 'Observable<any>' is not assignable to type 'Observable<any>'. Two different types with this name exist, but they are unrelated.
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
æš¡æ¬ãããžã§ã¯ãã§è€è£œã§ããŸããã§ãããåé¡ã®åå ãæ¬ èœããŠãããããè€è£œã§ããŸããã @jeffwhelpleyåé¡ãè€è£œããã¢ãã¯ãããžã§ã¯ããå ¬éã§ããŸããïŒ Lernaãããžã§ã¯ãã¯åé¡ãªããç°¡åã«ãã¹ãã§ããã¯ãã ãšæããŸãã
@heruanç§ã¯ãããèšå®ããããšããŸãã
1ã€ã¯ãåèãŸã§ã«ã ç§ã¯åé¿çãèŠã€ãããããããªããšæããŸãã ProjectAãšProjectBã®äž¡æ¹ã§npm link rxjs
ãåé¡ã¯è§£æ±ºããŸãã ãã®å ŽåãProjectAãšProjectBã®äž¡æ¹ããŸã£ããåãrxjsãã¡ã€ã«ã䜿çšããŠããããããã®çš®ã®æå³ããããŸãã ããããªããã°ã圌ãã¯æè¡çã«ç°ãªããã¡ã€ã«ã䜿çšããŠããŸãïŒåãããŒãžã§ã³ã§ãã£ãŠãïŒïŒ
ProjectBããnpm link ProjectA
ã ãã®å Žåã次ã®ããã«ãªããŸãã
ãã ããäž¡æ¹ã§npm link rxjs
ãããšããããã®rxjsåç
§ã®äž¡æ¹ãåãæ£ç¢ºã«ã°ããŒãã«ãªnpmã®å Žæã«ã·ã³ããªãã¯ãªã³ã¯ãããŸãã
ãšã«ãããããã¯æããã«ãŸã çæ³çã§ã¯ãããŸããããå°ãªããšãç§ãã¡ãåé²ãããããšãã§ããäœãã§ãã
ãŸã...ãããé¢é£ãããéèŠãã¯ããããŸãããïŒãã¹ããããžã§ã¯ããèšå®ãããšè¡šç€ºãããŸãïŒã2ã€ã®ã©ã€ãã©ãªïŒã€ãŸããProjectAãšProjectBïŒã¯å®éã«ã¯ãã©ã€ããŒãnpmãªããžããªã§ãã
ãã³ããããããšã@jeffwhelpley ããããç§ã¯Lernaã䜿çšããŠããã®ã§ããã¹ãŠã®ã¢ãžã¥ãŒã«ã¯ãã§ã«çžäºã«ãªã³ã¯ãããŠããã®ã§ãåããã¡ã€ã«ãèªã¿åããŸãããTSã³ã³ãã€ã©ã¯å®éã®ãã¹ã§ã¯ãªããªã³ã¯ãã¹ãèæ ®ããŠãããšæããŸãã æš¡æ¬ãããžã§ã¯ãã§ã¯åçŸã§ããªãã®ã§ãééã£ãŠãããããããŸãããæ¬åœã«æã£ãŠããŸããŸãâŠ
ããã§ãšã¬ã¬ã³ããªæ¹æ³ã§ããã解決ã§ãã人ã¯ããŸããïŒ
ãŸããããã¯npm link
åé¡ã ãã§ã¯ãªããå
±æäŸåé¢ä¿ãå¥ã®ããŒãžã§ã³ãæããŠããå Žåãæ¬çªãã«ãã§ããã®åé¡ãçºçããããšã«æ³šæããŠãã ããã
ããªãã¡ã ProjectAã«ã¯[email protected]
ãå¿
èŠã§ãProjectBã¯[email protected]
ProjectAãProjectBã®äŸåé¢ä¿ãšããŠã€ã³ã¹ããŒã«ãããšãã¿ã€ããéè€ããããšã«ãªããŸããããšãã°ã2ã€ã®Observable
宣èšãããã1ã€ã¯node_modules/rxjs
ããã1ã€ã¯node_modules/project_a/node_modules/rxjs
ProjectAã®rxjsããŒãžã§ã³ã~4.9.0
ããã«ããããšã§ãããåé¿ã§ããŸããããã«ããã npm install
ã¯ç¬èªã®ããŒãžã§ã³ãããŠã³ããŒãããå¿
èŠããªããªãã代ããã«ProjectBããŒãžã§ã³ã䜿çšãããŸãã ãã ããããã¯éçºã¯ãŒã¯ãããŒã®åé¡ã ãã§ã¯ãªãããšã«æ³šæããŠãã ããã
@ andy-msã®ææ¡ã«åŸã£ãŠããã«æçš¿ããŸãã æšæ¥ãææ°ã®2.0.xã§ããäžåºŠè©ŠããŠã¿ãŸãããããŸã ãããŸããã
Angular 1ã®ã¿ã€ãã³ã°ã§ãããååŸããŠããŸãïŒ //github.com/DefinitelyTyped/DefinitelyTyped/issues/10082#issuecomment -253023107
ä»æ¥ãããã«ééããŸãããç¹ã«ã·ã³ããªãã¯ãªã³ã¯ã®åé¡ã§ãã ç§ã®ã»ããã¢ããã¯æ¬¡ã®ãããªãã®ã§ãïŒ
node_modules/
folder
another_folder
node_modules/ (symlinked to ../../node_modules)
app/ (angular1 app in typescript)
tsconfig.json
(other build files)
@types/angular
ãããªãå Žåã¯ã tsc
ã§åé¡ãããŸããã ã¹ã€ãŒãå
šäœïŒ @types/angular-{animate,cookies,mocks,resource,route,sanitize}
ïŒãããå Žåãã¿ã€ããšã©ãŒã倧éã«çºçãå§ããŸãã
$ npm run tsc
> [email protected] tsc D:\work\angular.io\public\docs\_examples\upgrade-phonecat-1-typescript\ts
> tsc
../../node_modules/@types/angular/index.d.ts(17,21): error TS2300: Duplicate identifier 'angular'.
../../node_modules/@types/angular/index.d.ts(18,21): error TS2300: Duplicate identifier 'ng'.
app/app.animations.ts(5,3): error TS2339: Property 'animation' does not exist on type 'IModule'.
app/app.config.ts(6,45): error TS2305: Module 'angular' has no exported member 'route'.
app/core/checkmark/checkmark.filter.spec.ts(5,22): error TS2339: Property 'mock' does not exist on type 'IAngularStatic'.
app/core/phone/phone.service.spec.ts(18,22): error TS2339: Property 'mock' does not exist on type 'IAngularStatic'.
app/core/phone/phone.service.spec.ts(23,18): error TS2339: Property 'expectGET' does not exist on type 'IHttpBackendService'.
app/core/phone/phone.service.spec.ts(30,18): error TS2339: Property 'verifyNoOutstandingExpectation' does not exist on type 'IHttpBackendService'.
app/core/phone/phone.service.spec.ts(31,18): error TS2339: Property 'verifyNoOutstandingRequest' does not exist on type 'IHttpBackendService'.
app/core/phone/phone.service.spec.ts(39,18): error TS2339: Property 'flush' does not exist on type 'IHttpBackendService'.
app/core/phone/phone.service.ts(5,33): error TS2305: Module 'angular' has no exported member 'resource'.
app/phone-detail/phone-detail.component.spec.ts(5,22): error TS2339: Property 'mock' does not exist on type 'IAngularStatic'.
app/phone-detail/phone-detail.component.spec.ts(18,46): error TS2305: Module 'angular' has no exported member 'route'.
app/phone-detail/phone-detail.component.spec.ts(20,20): error TS2339: Property 'expectGET' does not exist on type 'IHttpBackendService'.
app/phone-detail/phone-detail.component.spec.ts(32,20): error TS2339: Property 'flush' does not exist on type 'IHttpBackendService'.
app/phone-detail/phone-detail.component.ts(7,37): error TS2305: Module 'angular' has no exported member 'route'.
app/phone-list/phone-list.component.spec.ts(6,22): error TS2339: Property 'mock' does not exist on type 'IAngularStatic'.
app/phone-list/phone-list.component.spec.ts(15,20): error TS2339: Property 'expectGET' does not exist on type 'IHttpBackendService'.
app/phone-list/phone-list.component.spec.ts(26,20): error TS2339: Property 'flush' does not exist on type 'IHttpBackendService'.
node_modules/@types/angular-resource/index.d.ts(192,40): error TS2305: Module 'angular' has no exported member 'resource'.
node_modules/@types/angular/index.d.ts(17,21): error TS2300: Duplicate identifier 'angular'.
node_modules/@types/angular/index.d.ts(18,21): error TS2300: Duplicate identifier 'ng'.
ããŒã¹../../node_modules/@types
ãtypeRoots
ãšããŠtsconfig.json
è¿œå ããŠä¿®æ£ããŸããïŒ
"typeRoots": [
"../../node_modules/@types/"
]
ããŒã«ã«ã®node_modules/@types
è¿œå ããããšããŸããããããŸããããŸããã§ããã
@heruanç§ãå§ããããã¯ã®1ã€ã¯ãlernaæ©èœã䜿çšãã代ããã«ããªã³ã¯/ãªã³ã¯è§£é€çšã®ç¬èªã®npmã¹ã¯ãªãããå®è£
ããããšã§ãã ãããã£ãŠã lerna run link
ãããªããšãè¡ããšããã¹ãŠã®package.jsonãã¡ã€ã«ã«link
ãšããnpmã¹ã¯ãªããããããïŒç§ã®å Žåã¯ïŒ npm link rxjs
ãå«ããã¹ãŠã®npmãªã³ã¯ãå®è¡ããŸãã
@jeffwhelpleyããã§ãœãªã¥ãŒã·ã§ã³ãå ±æã§ããŸããïŒ
@yvoronenãã¹ãŠã®ã³ãŒããå
±æããããšã¯ã§ããŸããããç§ã®è§£æ±ºçã¯äžèšã®ãšããã§ãã 倧ãŸãã«èšãã°ãç§ãèŠã€ããéµã¯ãäœæ¥äžã®ãã¹ãŠã®ããŒã«ã«ãããžã§ã¯ãã ãã§ãªããåé¡ã®åå ãšãªã£ãŠããå¯èœæ§ã®ããå€éšã©ã€ãã©ãªãnpmãªã³ã¯ããããšã§ãïŒç§ã®å Žåãrxjsãåé¡ã§ãã Observableãªããžã§ã¯ãã®ãã©ã€ããŒãå€æ°ïŒã ãã®ããã lernaã䜿çšããŠãã¹ãŠã®ããŒã«ã«ãããžã§ã¯ãã管çããŠããã lerna run link
ãŸãã ã·ãŒã³ã®äžã§ã¯ãããã¯ç§ã®ãããžã§ã¯ãã®åã«ãŒããã©ã«ããŒå
ã§npm run link
åŒã³åºããŸãã ãããã£ãŠãpackage.jsonã§æ¬¡ã®ããã«link
ã¹ã¯ãªãããå®çŸ©ããå¿
èŠããããŸãã
"scripts": {
"link": "npm link my-local-project1 && npm link my-local-project2 && npm link rxjs || true",
"unlink": "npm unlink my-local-project1 && npm unlink my-local-project2 && npm unlink rxjs && npm i || true"
}
ããŸãããã°ããã¯çã«ããªã£ãŠããŸããã質åãããã°ç§ã«ç¥ãããŠãã ããã
ã¢ããããŒããæäŸãããã£ãã @mhegazyãšã®
ããªãã®ã³ã¡ã³ãããã®åé¡ã«å±ããŠãããšç¢ºä¿¡ããŠããŸããïŒ å®å
šã«èãããŸã
éããŸãã
æšã2017幎1æ12æ¥ã«ã¯ãåå3æ14åAMãã³ã¹ã®[email protected]ã¯æžããŸããïŒ
ã¿ã€ããnpmãªã³ã¯AFAIKã䜿çšããŠããªãããšã«æ³šæããŠãã ããã
ãç»åïŒç»åã
https://cloud.githubusercontent.com/assets/216566/21887548/451d059c-d8b8-11e6-86d1-50afae4e5c2f.pngâ
ããªããã³ã¡ã³ãããã®ã§ããªãã¯ãããåãåã£ãŠããŸãã
ãã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããGitHubã§è¡šç€ºããŠãã ãã
https://github.com/Microsoft/TypeScript/issues/6496#issuecomment-272137732 ã
ãŸãã¯ã¹ã¬ããããã¥ãŒãããŸã
https://github.com/notifications/unsubscribe-auth/AAUAmcMXodOvU7coymMqGzTofD4pMagpks5rRgsogaJpZM4HFcWl
ã
@dobesvããããæåã«åé¡ãçºçããçç±ã§ãã TypeScriptã¯ãã·ã³ããªãã¯ãªã³ã¯ããããã¹ãšå®éã®ãã¹ãåºå¥ã§ããªãã£ããããã¯ã©ã¹å®£èšã2ã€ã®å¥åã®å®£èšãšããŠèªèããŸãã 解決çã¯æ¬¡ã®ããããã§ã
@DanielRosenwasserç³ãèš³ãããŸããããç§ã®ã³ã¡ã³ãã...ã*>æžããã@ã3:14ãã³ã¹æšã2017幎1æ12æ¥ã«ã¯ã誰ãä»ã®äººã®ã³ã¡ã³ãã«åå¿ããããšã誰ã§ããããã©ã®ãããªåœŒãã¯ãç§ã¯ãã¯ããªã³ãŒã«èšã£ããç§ã¯åœŒããšä¿¡ããŠãã®ã³ã¡ã³ãã¹ã¬ããã§ãnpmãªã³ã¯ãšã¯äœã®é¢ä¿ããªãåé¡ã«ã€ããŠè³ªåããŠããŸããã
ããããç§ãããã«ããéããã¡ã€ã«åãåã§åœ¹å²ãæããæ¹æ³ã«ã€ããŠäœãé¢çœãããšãããããšã«èšåããå¿ èŠããããŸãã ä»æ¥ãç§ã¯RxJSã§åé¡ãçºçãããã®ãããªã¡ãœãããObservableã§å®çŸ©ãããŠããªããšæå¥ãèšããŸããã ãã®çç±ã¯ãHTTPã©ã€ãã©ãªã«ã¯ãä»ã®ãã¹ãŠã®ã©ã€ãã©ãªãšã¯ç°ãªãç¬èªã®rxjsã®ãã©ã€ããŒãã³ããŒããã£ãããã§ãã å®éãnode_modulesããªãŒã§rxjsã®4ã€ã®ç°ãªãã³ããŒãèŠã€ããŸããã
ããã¯åé¡ã®ããã¢ãããŒãã®ããã§ãããåââé¡ãããæ··ä¹±ãç¶ããã§ãããã
åã®ã¢ã€ãã³ãã£ãã£ã«äœããã®åœ¹å²ãæãããŠãããã¡ã€ã«åã®ãã®æŠå¿µå šäœããªããªã£ãå Žåããã®npmãªã³ã¯ã®åé¡ããªããªããšæããŸãã
ç§ã¯ãããã©ã®ããã«æ©èœãããã«ã€ããŠãŸã å°ãææ§ã§ã...ç§ã¯TypeScriptã«äžæ £ãã§ãã ããããããã¯ç§ãåŸãŠããäžçš®ã®å°è±¡ã§ãããã®ããã¡ã€ã«åãéèŠããªããšã¯ãç§ã䜿çšããŠããã©ã€ãã©ãªïŒionic2ãšangular2ãšrxjsïŒã«é¢é£ããŠããªãã®æ··ä¹±ãåŒãèµ·ãããŸããã
åé¡ã¯ããã¡ã€ã«åããŸã Javascriptã®ã¢ãžã¥ãŒã«ã®IDã§ãããããå®å šã«åé€ã§ããªãããšã§ãã è€æ°ã®ããã±ãŒãžããŒãžã§ã³ã«é¢ããŠãæ£èŠãã¹ïŒã·ã³ããªãã¯ãªã³ã¯ã®è§£æ±ºïŒã䜿çšããéã®åé¡ã«ã€ããŠèª°ãã詳ãã説æã§ããŸããïŒ ããªãŒå ã«è€æ°ã®ããã±ãŒãžããŒãžã§ã³ãããå Žåããããã«ã¯è€æ°ã®æ£èŠã®çµ¶å¯Ÿãã¹ããããŸãããïŒ
ç·šéïŒç§ã¯æçš¿åŸã«ããã«æ°ã¥ããŸããããããŠãã®ã³ã¡ã³ãã¯ãããããŸãèŠçŽããŠããŸãïŒ
https://github.com/Microsoft/TypeScript/issues/6496#issuecomment -257016094
exclude
ãšcompilerOptions.typeRoots
ã¯tscã«ãã£ãŠå®å
šã«ç¡èŠãããŸãã ã·ã³ããªãã¯ãã¹ãç¡èŠããããã«ãã¹ãŠã®çµã¿åãããè©ŠããŸããããç¡èŠãããŸãã
ã·ã³ããªãã¯ãªã³ã¯ã解決ããŠããããã«ãã¢ãžã¥ãŒã«ãå®å
šã«ç°ãªããã¹ãšããŠèªèããŠãããé€å€ããããã¿ãŒã³ãç解ããŠããŸããã
ããšãã°ã G:\www\cim-service-locator
npmãnpm link cim-service-locator
ãªã³ã¯ãããŠããŸãã G:\www\cim-backend
ãããžã§ã¯ããã¹ã§ããšã©ãŒã¯æ¬¡ã®ããã«è¡šç€ºãããŸãã
excludes / includes / typesRootã®å¯èœãªãã¹ãŠã®çµã¿åãããè©ŠããŸããããtscã«ããããç¡èŠãããããšãã§ããŸããã§ããã 2.2-dev.20170131ã䜿çš
ãã®åé¡ã¯ããnpmlinkãã䜿çšããå ŽåïŒ@waldekmastykarzã«ãã£ãŠå ±åãããSPFxã®åé¡ãä»ããŠïŒãšãnpmlinkãã䜿çšããªãå ŽåïŒãã°ïŒ11436ãåç §ïŒã®äž¡æ¹ã§çºçããŸããã
ç§ã¯æçµçã«ãTypeScriptã³ã³ãã€ã©ã®å³å¯ãã¯ã node_modulesãã©ã«ãã®å¥æãªèšèšãåå ã§çŸå®çã«çºçããå¯èœæ§ã®ããéäºææ§ã«ãããã®ã§ããããšã«
A
+---B<strong i="8">@1</strong>
+---C
| +---B<strong i="9">@2</strong> <--- first copy of ClassB extends ClassE version 3.4
| \[email protected]
+---D
| \---B<strong i="10">@2</strong> <--- second copy of ClassB extends ClassE version 3.5
\[email protected]
ãã®äŸã§ã¯ã Aã®B @ 1ãžã®äŸåé¢ä¿ãšã®ç«¶åãåé¿ããããã«ã B @ 2ããµããã©ã«ããŒã«ã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ããã§ãClassBãClassEããæ¡åŒµããã次ã®ãããªãã®ããããšããŸãã
B / package.json
{
"name": "B",
"version": "2.0.0",
"dependencies": {
"E": "^3.0.0",
...
}
Cã®package.jsonãE @ 3.4ãèŠæ±ããããããŸããã€ãŸããå®éã«ããããŸããã ããããåãæå³ã§äœ¿çšããããšãããšãå®è¡æã«ã³ãŒãã倱æããå¯èœæ§ããããŸãã
ãã®äŸã§ã¯ãTS2345ããã®ééããé²ããŸããããã¯çŽ æŽãããããšã§ãã ãã ããå¿ é ã§ã¯ãããŸãããã³ã³ãã€ã©ã2ã€ã®ClassBã³ããŒãåçãšããŠæ±ã£ãå Žåããã®åã·ã¹ãã ã¯å éšçã«äžè²«æ§ãããã決å®è«çãªåäœãããŸãã
TS2345ã¯äž»ã«èª€èŠå ±ãçæãããããããã¯éèŠã§ãã ãããã®èª€èŠå ±ã¯ãNPMããã±ãŒãžéã§ã¿ã€ããå ±æããå Žåã¯åžžã«ããä»»æã«ãæžã蟌ãããšã匷å¶ããä»ã®ééããåŒãèµ·ãããŸãã ãããã£ãŠãå³æ Œãã¯ããã解決ãããããå€ãã®åé¡ãçã¿åºããŠããŸãã
次ã®ä¿®æ£ãææ¡ããããšæããŸãã
ãããã®æ¡ä»¶ããã¹ãŠåœãŠã¯ãŸãå Žåã¯ããã©ã€ããŒãã¡ã³ããŒãæã€ã¯ã©ã¹ã®TS2345ãå ±åããªãã§ãã ããã
ãããã®åºæºã®ãããããæºããããŠããªãå Žåã¯ãTS2345ãå ±åããŠãåé¡ãããŸããã
@iclanton @ nickpape-msft
@seansfkelleyWebpackãšã©ãŒã¯TypeStrong / ts-loaderïŒ468ã«ãã£ãŠè¿œè·¡ãããŸã
ããã«ã¡ã¯ãã¿ããªã
誰ãã解決çãèŠã€ããŸãããïŒ
RxJSã䜿çšããŠãããžã§ã¯ããå¥ã®ãããžã§ã¯ãã«ãªã³ã¯ãããšãåãåé¡ãçºçããŸãã
ããããšã;ïŒ
ããã«ã¡ã¯ãäžæçãªåé¿çã¯ãäŸåé¢ä¿ã«ãã£ãŠè¿ãããObservableãObservable#from
ã©ããããããšã§ãã
ãŸã 解決çã¯ãããŸããã ïŒ
ããã«ã¯2ã€ã®åé¡ãããããã§ãã
ts-loaderã®ãŠãŒã¶ãŒãéè€ããå®çŸ©ã«å¯ŸããŠèª€ã£ããšã©ãŒãåãåãã®ã¯ãã³ã³ãã€ã©APIãžã®ç¡å¹ãªå ¥åãåå ã®ããã§ãã ãã®ä¿®æ£ã¯TypeStrong / ts-loaderïŒ468ã§å ¥æã§ããŸãã
ãã1ã€ã®åé¡ã¯ãåãããã±ãŒãžïŒåãnpmããã±ãŒãž+ããŒãžã§ã³ïŒããã¡ã€ã«ã·ã¹ãã ïŒ npm link
ã䜿çšããªãïŒã®2ã€ã®ãã¹ãããããã©ã«ããŒã«ãåæåãŸãã¯ãã©ã€ããŒãã¡ã³ããŒãæã€ã¯ã©ã¹ã®ããããã§ããŒã«ã«ã«2åã€ã³ã¹ããŒã«ãããŠããå Žåãããã2ã€ã®ããã±ãŒãžã®åã¯ãäºææ§ããªããã倱æããŸãã
ãã®åé¡ã¯ããå°ãè€éã§ãããã³ã³ãã€ã©ãããã±ãŒãžãåŠçããåã«ããã±ãŒãžããéè€æé€ãããããã®è¿œå ã®äœæ¥ãå¿
èŠã«ãªããŸãã
ãããã®2ã€ã®ã«ããŽãªã®ãããã«ãåœãŠã¯ãŸããªãå Žåã¯ãæ°ããåé¡ãæåºããåé¡ãããŒã«ã«ã§åçŸããã®ã«ååãªæ å ±ãæäŸããŠãã ãããããã«èª¿æ»ãããŠããã ããŸãã
æ¢ç¥ã®åé¿çã¯ãéè€ãã©ã«ããŒãæé€ãããã«ããããžã§ã¯ããœãªã¥ãŒã·ã§ã³ã䜿çšããããšã§ããã€ãŸããäž¡æ¹ã®node_modulesãµããã©ã«ããŒãåãã¿ãŒã²ããã«ã·ã³ããªãã¯ãªã³ã¯ãããããã«ããŸãã
Rush ïŒç§ãã¡ã䜿çšããïŒãšLernaããã®äŸã§ãã
@smcatalaããªãã¯ããªãã®è§£æ±ºçã説æããããšãã§ããŸãã ç§ã¯ãããç·æ¥ã«ä¿®æ£ããå¿ èŠããããŸãã ããããšãã
@ leovo2708
ã¢ãžã¥ãŒã« 'foo'ïŒ
import { Observable } from 'rxjs'
export function foo() {
return Observable.of('foo')
}
ã¢ãžã¥ãŒã« 'foo'ã«äŸåããä»ã®ã¢ãžã¥ãŒã«ã®ã¯ã©ã€ã¢ã³ãã³ãŒãïŒ
import { Observable } from 'rxjs'
import { foo } from 'foo'
Observable.of(foo()) // wrap the returned Observable
.forEach(res => console.log(res))
@ leovo2708ç°¡åãªè§£æ±ºçã¯ã npm link
ã䜿çšããªãããšã§ãã
ts 2.1ã䜿çšããŠãåäžã®ã©ã€ãã©ãªã§npmãªã³ã¯ã䜿çšããããšãã§ããŸããïŒãããxlib
ãšåŒã³ãŸãããããç§ã®å®éã®äŸã§ãïŒããã¢ãžã¥ãŒã«ãã©ã€ãã©ãªïŒ xlib
ïŒã§ããããšã確èªããå¿
èŠããããŸãã
ç§ã¯æ¬¡ã®ã¯ãŒã¯ãããŒã§ãããè¡ããŸã
node_modules
åé€ããŸãnpm link xlib
ã¯ãæ¶è²»ãããžã§ã¯ãã®node_modules
ã«xlib
ãžã®ã·ã³ããªãã¯ãªã³ã¯ãäœæããŸãnpm install
ããã¯ç§ã®æ¶è²»ãããžã§ã¯ãã®æ®ãã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãç§ã¯å®éã«ã¯ãã®äŒè©±ããã©ããŒããŠããªããããã®åé¡ã2.2以éã«å€æŽ/ä¿®æ£ãããŠãããã©ããã確èªããŠããŸããããts2.1ã®åé¿çãå ±æããããšæããŸãã
圹ã«ç«ã€å Žåã¯ãåæåã®è€æ°ã®å®çŸ©ã®æå°éã®åçŸãããã«ãŸãšããŸããïŒ https ïŒ
@mhegazy npmãªã³ã¯ã䜿çšãããšäžèšã®åé¡ãçºçããŸããããããæ®ãã®åæã«åœ±é¿ãäžãããšã¯æããªãã
ã©ããããããšãããããããã«ä¿®æ£ãããããšãé¡ã£ãŠããŸãã ãã ããæ°ãããœãªã¥ãŒã·ã§ã³ã䜿çšããObservableã䜿çšããŠãã¡ã€ã«ãè€è£œããŸããã ããã¯è¯ããããŸããããäžæçãªè§£æ±ºçã«ãããŸããã
tsconfig.json
ã¯ãã¹ãããã³ã°ãå
¬éããéè€ããäŸåé¢ä¿ãpaths
ã«è¿œå ããŠããªã³ã¯ããããã®ã§ã¯ãªããå³åŽã®node_modules
ããèªã¿èŸŒãŸããããã«ããŸãã
{
"compilerOptions": {
"baseUrl": ".", // This must be specified if "paths" is.
"paths": {
"@angular/common": ["../node_modules/@angular/common"],
"@angular/compiler": ["../node_modules/@angular/compiler"],
"@angular/core": ["../node_modules/@angular/core"],
"@angular/forms": ["../node_modules/@angular/forms"],
"@angular/platform-browser": ["../node_modules/@angular/platform-browser"],
"@angular/platform-browser-dynamic": ["../node_modules/@angular/platform-browser-dynamic"],
"@angular/router": ["../node_modules/@angular/router"],
"@angular/http": ["../node_modules/@angular/http"],
"rxjs/Observable": ["../node_modules/rxjs/Observable"]
}
}
}
ããã§ãã§ã«èšåãããŠãããã©ããã¯ããããŸãããããã®ãœãªã¥ãŒã·ã§ã³ã¯ç§ã®ããã«æ©èœããŸããïŒ https ïŒ
ãã¹ã«ã../ããã¬ãã£ãã¯ã¹ããªãããšãé€ããŠãåºæ¬çã«äžèšã®@charpeniã®ãœãªã¥ãŒã·ã§ã³ãšåãã§ãã ïŒããã¯ãtsconfig.jsonãã¡ã€ã«ããããžã§ã¯ãã«ãŒãã®ãµããã©ã«ããŒã«ããããšãæå³ããªãã®ã§ãå¥åŠã«æããŸããïŒïŒ
ããã¯çŽ æŽãããã¢ã€ãã¢ã§ã@charpeniã ç§ã¯ãã®ãã¹èšå®ã䜿çšããŠä»ã®ããŸããŸãªåæ§ã®åé¡ãåé¿ããŸãããããããçæ³çã§ãã å®éãïŒæ¶è²»ããããã¹ãŠã®ãããžã§ã¯ãã§ã¯ãªãïŒæ¶è²»ãããžã§ã¯ãã§æ£ããpaths
èšå®ãè¡ããšãTypeScriptã³ã³ãã€ã©ãããŒãã®è§£æ±ºã«åŸããªããªãå¯èœæ§ãããã®ã§ã¯ãªãããšæããŸãã ãããæ©èœããå Žåãããã¯OïŒnïŒããã¯ã§ã¯ãªãOïŒ1ïŒããã¯ã«ãªããŸãã åºæ¬çã«ããã®ãããªã¹ããŒã ã¯ããŒã解決ãéçã«å®è¡ããçµæãtsconfigã«è©°ã蟌ã¿ãŸãã
誰ããèŠããïŒãŸãã¯å©ããã...ïŒå Žåãç§ã¯ãããã®ããšãåå ¬éã§å®éšããŠããŸãã ç§ã¯ãããã次ã«äžèšã®ã¢ã€ãã¢ãè©Šã¿ãŸãã
䜿ããããããããã«ã次ã®ããã«ãã¹ãèšå®ããããšãã§ããŸãã
{
"compilerOptions": {
"baseUrl": ".", // This must be specified if "paths" is.
"paths": {
"@angular/*": ["../node_modules/@angular/*"],
"rxjs/*": ["../node_modules/rxjs/*"]
}
}
}
npmãªã³ã¯ã¯ãã¢ããªããžããªã¢ãŒããã¯ãã£ã§ã¯ãªããè€æ°ã®ããã±ãŒãžãæäœããå Žåã®ã¯ãŒã¯ãããŒã®éèŠãªéšåã§ãã TSã¯ã2ã€ã®ããã±ãŒãžãåäžã§ããããšã©ãŒã§ã¯ãªãããšã確èªã§ããã¯ãã§ãã
@charpeniåé¿çãæ©èœãããããšãã§ããŸããã§ããã æ確ã«ããããã«ããããã©ã®tsconfig.jsonã«è¿œå ããå¿ èŠããããŸããïŒ ã«ãŒãããã±ãŒãžããŸãã¯ãªã³ã¯ãããããã±ãŒãžïŒ
ç§ããã®åé¡ãçµéšããŠããŸãã ããã¯æææ¥ã«çªç¶èµ·ããå§ããŸããããããŠç§ã¯çç±ãããããŸããã ããã¯ãç¹ã«ç§ãã¡ã®ãããžã§ã¯ãã®ããã±ãŒãžãéçºããããšã«ãªããšãéçºãæ¬åœã«åŠšããŠããŸãã ç§ã¯ãããä¿®æ£ããããã«å€ãã®åé¿çãè©ŠããŸããã Windowsã§mklink /j
ãå®è¡ããŠããã®åé¡ãçºçãããããnpmãªã³ã¯ã®åé¡ã§ã¯ãããŸããã 誰ããåé¿çãä¿®æ£ãæã£ãŠããå Žåãããã¯å€§ããªå©ãã«ãªããŸãã
ç§ã®åé¿çã¯ãã«ãŒãããã±ãŒãžãšäŸåé¢ä¿ã®äž¡æ¹ã§ãã¹ãŠã®ãéè€ãããã±ãŒãžãnpmãªã³ã¯ããããšã§ããããã¯ãããããåããã¡ã€ã«ãåã³åç §ããããã§ãã
ãšããã§ããã®åé¡ã¯@types
ãšã¯äœã®é¢ä¿ããããŸãã
æçµçã«ã°ãããã¿ãŒã³ã䜿çšããŸããã
@felixfbeckerå®è£ ã«ã€ããŠã¯ã https ïŒ
@ types / nodeã«å®å šã«é¢é£ããŠããããšãé€ããŠãåæ§ã®åé¡ããããŸãã
libAã¯@node / typesã«äŸåããŸã
libBã¯libAãš@node / typesã«äŸåããŸã
libCã¯ãlibAãlibBãããã³@ node / typesã«äŸåããŸã
libAã¯æ£åžžã«ãã«ããããŸãã
libAãã«ããã¡ã€ã«ã«ãªã³ã¯ãããlibBnpmã
libAããã³libBã«ãªã³ã¯ãããlibCnpmã¯ã次ã®ãããªãšã©ãŒã§ã¿ã€ããã§ãã¯ã«å€±æããŸã
libC/node_modules/@types/node/index.d.ts(102,6): Duplicate identifier 'BufferEncoding'.
libC/node_modules/libB/node_modules/@types/node/index.d.ts(102,6): Duplicate identifier 'BufferEncoding'.
libC/node_modules/libB/node_modules/libA/node_modules/@types/node/index.d.ts(102,6): Duplicate identifier 'BufferEncoding'.
éãæªãã£ãã®ã§ããtypesããšãtypeRootsããããã£ãŠã¿ãŸããã
@charpeniãããžã§ã¯ãã
@nicksnyderã¯ããŒãžã§ã³ãç°ãªãããã§ããå¯èœæ§ãããã @types/node
ã¯ã°ããŒãã«å®£èšã§ããã€ãŸããåãååã2åå®çŸ©ããããšã¯ã§ããŸããã ããããããã±ãŒãžãç°å¢ã®åã«äŸåããªãããšãæåã§ããçç±ã§ãããããã¯ãŠãŒã¶ãŒãæäŸããå¿
èŠããããŸãã
https://github.com/Microsoft/types-publisher/issues/107
@nicksnyderåæ§ã®åé¡ãããã3ã€ã®ãããžã§ã¯ããã¹ãŠãåäžã®@ types / nodeã€ã³ã¹ããŒã«ã«npmã§ãªã³ã¯ããããšã§åé¿ã§ããŸããã å®çŸ©ã¯åããã¡ã€ã«ã§å®çŸ©ããããããéè€ããªããªããŸã
@felixfbeckerãã¹ãŠã®ãããžã§ã¯ããåãããŒãžã§ã³ã®ããŒãã«äŸåããŠããããšã確èªããŸããã
FWIW libAã¯https://github.com/Microsoft/vscode-languageserver-node/tree/master/jsonrpcãlibBã¯https://github.com/Microsoft/vscode-languageserver-node/tree/master/clientããã³libCã§ãç§èªèº«ã®VSCodeæ¡åŒµã§ãã
@uncleramsayã©ã®ãããæ£ç¢ºã«npm link @types/node
ãïŒ
???
cd libA; npm link @types/node
cd libB; npm link @types/node
cd libC; npm link @types/node
ãªã³ã¯ãœãªã¥ãŒã·ã§ã³ãå®è¡ãããã®ã§ãããlibAãšlibBã®@ types / nodeäŸåé¢ä¿ãåé€ããŠãããããã¯ããlibCã®ããŒãã®ã³ããŒãžã®ããŒã«ã«åç §ãå«ãrefs.d.tsãè¿œå ããŸããã
/// <reference path='../../../path/to/libC/node_modules/@types/node/index.d.ts'/>
https://github.com/Microsoft/TypeScript/issues/9091#issuecomment -225303098ã®ã³ã¡ã³ãã®èª¬æãããçºçããŠããåé¡ã解決ã§ããããšãããããŸãã
ã¢ãžã¥ãŒã«ã®ã·ã³ããªãã¯ãªã³ã¯è§£æ±ºã®ãµããŒãã®ã¿ãè¿œå ããŸãã...
2ã€ã®ç°ãªãåç §ã¹ã¿ã€ã«ã䜿çšããŠãããšãã®ã³ãŒãããŒã¹ã®å¥ã ã®å ŽæïŒ
/// <reference path="../node_modules/@types/library" />
/// <reference types="library" />
node_modulesãã·ã³ããªãã¯ãªã³ã¯ãããŠããå Žåãã¢ãžã¥ãŒã«è§£æ±ºïŒ types=
ïŒã¯å®ãã¹ã«æ¡åŒµãããŸããã path=
ã¯æ¡åŒµãããªããããããã2ã€ã¯äºææ§ããããŸããã ããã«ããã tsc --listFiles
ã§ã³ã³ãã€ã«ãããšãã«ãã·ã³ããªãã¯ãªã³ã¯ãšãªã¢ã«ãã¹ã®2ã€ã®ç°ãªããã¡ã€ã«ãåç
§ãããŸãã
ç§ãã¡ãè¡ã£ã解決çã¯ãã©ã¡ããäžæ¹ã䜿çšããããšã§ããããäž¡æ¹ã䜿çšããããšã¯ãããŸããã§ããã ãŸãã reference path=
ã¹ã¿ã€ã«ã䜿çšããå Žåã«ãã³ã³ãã€ã©ãnode_modules/@types
ããåãèªåçã«ããŒãããªãããã«ãtsconfigã§typeRoots: []
ãæå®ããã®ã«ã圹ç«ã¡ãŸããã
ä»åŸã®å¥œã¿ã¯ïŒå°ãªããšãç§ãã¡ã«ãšã£ãŠã¯ïŒ types=
ã¹ã¿ã€ã«ã奜ãããšã ãšæããŸãã
ãã ããçæ³çã«ã¯ã reference path=
ãã¹ã«æ¡åŒµãããã®ãããªåé¡ãåé¿ããããã«éè€ããäžèŽãã¹ããã§ãã¯ããããšããå§ãããŸãã
ããã誰ããå©ããããšãé¡ã£ãŠããŸãã
@nicksnyderããªãã¯ãã®ãããªããšãããããšãã§ããã¯ãã§ãïŒ
cd libA/node_modules/@types/node; npm link
cd libB; npm link @types/node
cd libC; npm link @types/node
ãã®ããã«ãBãšCã¯AãšãŸã£ããåããã¡ã€ã«ãæããŠããŸãã
@uncleramsayã¯ããããããã¹ãŠåãããŒãžã§ã³ã§ããããšã«æ³šæããŠãã ããã以åã¯ããã§ã¯ãªãã£ãå¯èœæ§ããããŸãã
ãã¢ã®äŸåé¢ä¿ã¯ããã«å¯Ÿãã解決çã«ã¯ãªããŸãããïŒ
http://codetunnel.io/you-can-finally-npm-link-packages-that-cââontain-peer-dependencies/
ãã¢ã®äŸåé¢ä¿ã¯ããã©ã°ã€ã³ããããã©ããªãããèšãããã£ãŠããç¶æ³ã®ããã«çºæãããŸããã 圌ãã¯ãã®å Žåã¯å€§äžå€«ã§ãã ãããããnpm installãã®éè€ãé¿ããããšèããŠããã¹ãŠã®äŸåé¢ä¿ããã¢ã®äŸåé¢ä¿ã«å€æãå§ãããšãå€ãã®åé¡ãçºçããŸãã
ç§ãã¡ã¯ãå éšã®gitãªããžããªããããããè¿œæŸããã®ã«äœã¶æãè²»ãããŸããã ããªãã瀺åããŠããããã«äœ¿çšãããšããã¢ã®äŸåé¢ä¿ã«ãããããã€ãã®æ°ããåé¡ãšäº€æããããšã§ãããŒãžã§ã³ç®¡çã®åé¡ã䞊ã¹ãŠè§£æ±ºã§ããŸãã
ããªãŒå šäœãå転ããŸããã€ãŸãããã¹ãŠã®ããã±ãŒãžãã以åã¯éæ¥çãªäŸåé¢ä¿ã§ãã£ãããã±ãŒãžã«ããŒããªäŸåé¢ä¿ããšã責任ããããŸããå€ãã®å Žåããããäœã®ããã«ããã®ãããããŸããã
ãã¢ã®äŸåé¢ä¿ãåé€ãããå Žåããããã®ããŒããªäŸåé¢ä¿ã¯ããããåé€ãããŸãã
ããã±ãŒãžã®äœæè ã¯ããã¢ããŒãžã§ã³ã®ãã¿ãŒã³ã«å¹ åºãç¯å²ã䜿çšããããšèããŠãããå®éã«ãã¹ãããããšã®ãªãããŒãžã§ã³ã§åäœãããšäž»åŒµããŠããŸãã å£ãããã«ãã¯çªç¶æ¶è²»è ã®åé¡ã«ãªããŸã
ããèšã£ãã
ãããç§ã䜿çšããåé¿çã®3ã€ã®ãªãã·ã§ã³ã§ãïŒ
tsc
ã³ã³ãã€ã©ã¯ãVS2017ãããã¯ããã«å¯å®¹ã§ããããããVS2017ãã³ãŒãïŒã·ã³ããªãã¯ãªã³ã¯ãããnode_modules
ãå«ãïŒãã¯ããŒã«ããŠåªããã€ã³ããªã»ã³ã¹ãæäŸããæ··ä¹±ããããã§ãã ããããç§ã¯å€§ãããŠè€éãªmulti-npm-moduleãããžã§ã¯ããæã£ãŠããã®ã§ãVS2017ã䜿çšããŠãã ãã...åæ§ã®ããŒãºãããå Žåã¯ããªãã·ã§ã³2ãš3ãèªãã§ãã ãã...ã
d.ts
æŸåºããoutDir
ãšrootDir
ïŒ tsconfig.json
ïŒã䜿çšããå Žåãã·ã³ããªãã¯ãªã³ã¯ãããlib-moduleã¯d.ts
宣èšãçºè¡ããå¿
èŠãããããããã®å®£èšã¯lib-moduleå
ã«ããå¿
èŠããããŸãã package.json
types
ããããã£ã
ããã¯ãlibã¢ãžã¥ãŒã«ã®tsconfig.json
ãã©ã®ããã«èŠãããã®äŸã§ãã
{
"compileOnSave": true,
"compilerOptions": {
"module": "commonjs",
"sourceMap": true,
"declaration": true,
"jsx": "react",
"newLine": "LF",
"pretty": true,
"stripInternal": true,
"diagnostics": true,
"target": "es5",
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"rootDir": "./src",
//workaround for npm linking projects and associated dupe identifier bugs: https://github.com/Microsoft/TypeScript/issues/9566#issuecomment-287633339
"baseUrl": "./",
"paths": {
"*": [
"node_modules/@types/*",
"*",
"custom-dts/*"
]
}
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"dist"
]
}
ãŸããlib-moduleã®package.json
ã¯ã次ã®ãããªãã®ãå«ãŸããŠããå¿
èŠããããŸãã
"main": "./dist/_index.js",
"types": "./dist/_index.d.ts",
ãã®ãªãã·ã§ã³ã¯ããŸãæ©èœããŸããäž»ãªåé¡ã¯ãVisual Studioã§ãããã°ãŸãã¯ãå®çŸ©ã«ç§»åããŸãã¯ããã¹ãŠã®åç
§ã衚瀺ããããšãå®éã®ã¿ã€ãã¹ã¯ãªãããœãŒã¹ãã¡ã€ã«ã§ã¯ãªãd.ts
ã衚瀺ããã Visual Studioã®äž»ãªå©ç¹ïŒå€§ããªãããžã§ã¯ãã§ã®ããã²ãŒã·ã§ã³ïŒ
ããã®å®éã®äŸãå®éã«èŠããå Žåã¯ãnpmã¢ãžã¥ãŒã«xlib
v8.5.xãèŠãŠãã ããã
.js
æŸåºããïŒç§ã®ãæ°ã«å
¥ãã®éžæïŒ.ts
ãã¡ã€ã«ãçŽæ¥äœ¿çšããŠãã·ã³ããªãã¯ãªã³ã¯ãããlib-modulesãå
¥åã§ããŸãã ãã ãã outDir`` and
rootDir in your
tsconfig.json```ãã¡ã€ã«ã䜿çšããªãå Žåã«éããŸãã ããã«ãããVS2017åç
§ãé©åã«æ©èœããããã«ãªããŸãã å¿
èŠãªæ§æèšå®ã¯æ¬¡ã®ãšããã§ãã
{
"compileOnSave": true,
"compilerOptions": {
"module": "commonjs",
"sourceMap": true,
//"declaration": true,
"jsx": "react",
"newLine": "LF",
"pretty": true,
"stripInternal": true,
"diagnostics": true,
"target": "es5",
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
//"outDir": "./dist",
//"rootDir": "./src",
//workaround for npm linking projects and associated dupe identifier bugs: https://github.com/Microsoft/TypeScript/issues/9566#issuecomment-287633339
"baseUrl": "./",
"paths": {
"*": [
"node_modules/@types/*",
"*",
"custom-dts/*"
]
}
},
"include": [
"src/**/*"
],
"exclude": [
"node_modules",
"dist"
]
}
lib-moduleã®package.json
ã次ã®ããã«å€æŽããå¿
èŠããããŸãã
"main": "./src/_index.js",
"types": "./src/_index.ts",
äžèšã®åé¿çã¯ãålib-moduleãåé·ãªåæ
å ±ãåºåããªãå Žåã«ã®ã¿æ©èœããŸãã ããšãã°ã以åã¯xlib
ã©ã€ãã©ãªã§@types/async
åã®å®çŸ©ãå
¬éããŠããŸããã ããããããããç§ã¯ãŸãç¬ç«ããŠ@types/async
åç
§ããå¥ã®ã©ã€ãã©ãªãæã£ãŠããŸããã .ts
ãã¡ã€ã«ãçŽæ¥å
¥åã«äœ¿çšãããšã tsc
async
ã¯2ã€ã®lib-modulesããduplicate identifier
åé¡ãçºçããŸãã ããã解決ããã«@types
ãè€æ°ã®lib-modulesããåã.d.ts
åé¿çã䜿çšããå¿
èŠããããŸãã
ããã«ãããç§ã«ããã£ãæéãç¯çŽã§ããããšãé¡ã£ãŠããŸããå šäœãšããŠãããã¯éåžžã«èŠçã§ãããtypescriptããŒã ãã·ã³ããªãã¯ãªã³ã¯ãããã¢ãžã¥ãŒã«ãä¿®æ£ã§ããããšãé¡ã£ãŠããŸãã ããããå°ãªããšãä»ã¯ããçšåºŠæ©èœããŸãïŒ2.xããåã¯åºæ¬çã«äžå¯èœã§ããïŒ
@mhegazyã«ãã£ãŠhttps://github.com/Microsoft/TypeScript/issues/11916#issuecomment-257130001ã«æçš¿ãããåé¿çïŒåé¿ç2 @jasonswearingenã®ããªãšãŒã·ã§ã³ïŒã¯ãlernaãããžã§ã¯ãã§ãªã³ã¯ãããã¢ãžã¥ãŒã«ã䜿çšãããšãã«ããã解決ããŸããïŒ
ç§ã¯èªåã®çµéšãå ±æããããšæã£ãŠããŸãã... libãä»ã®ãããžã§ã¯ãéã§å ±æã§ããããã«ãæ¢åã®ãããžã§ã¯ãããlibãäœæ/æœåºããããšããŠããŸãã
Windows 10 Enterprise
VS2015ã¢ããããŒã3
VS2015çšããŒã«2.2.2
VSã³ãŒã1.12.2
Typescript 2.2.2
NPMïŒ3.10.9
ããŒãïŒ6.9.2
Angular4.1.xããã³ããšã³ããåããVS2015 ASP.MVCãããžã§ã¯ãããããä»ã®ãããžã§ã¯ãã§äœ¿çšã§ããããã«ãããã€ãã®ã³ã³ããŒãã³ããæœåºããŠå ±éã®ã©ã€ãã©ãªãäœæãå§ããŸããã
ã©ã€ãã©ãªãããžã§ã¯ãã¯VSCodeã䜿çšããŠæ§ç¯ãããããŒã«ã¢ããã䜿çšããŠes2015ães5ãããã³umdããŒãžã§ã³ãé©åãªd.tsãã¡ã€ã«ãšãšãã«distãã©ã«ããŒã«æ§ç¯ããŸãã
æçµçµæã¯æ¬¡ã®ããã«ãªããŸãã
-- dist
|
-- mylib
|-- <strong i="16">@myscope</strong>
|-- mylib.es5.js
|-- mylib.js
|-- bundles
|-- mylib.umd.js
|-- src
|-- [all the d.ts folders/files]
|-- index.d.ts
|-- package.json
|-- public_api.d.ts
dist / mylibãã©ã«ããŒãVS2015 / Angular4.1.xãããžã§ã¯ãã®ãã©ã«ããŒã«npmãªã³ã¯ããŸããã
VS 2015ã§ãããžã§ã¯ããã³ã³ãã€ã«ããããšãããšããµãã¹ã¯ãªãã·ã§ã³ããªãã¶ãŒããã«ãªã©ã®äžèšã®ç¶æ³ã®ããã€ãã§èª¬æããã®ãšåãã¿ã€ãã®ã¡ãã»ãŒãžã衚瀺ãããŸãã
Ex: Build: Argument of type 'Subscription' is not assignable to parameter of type 'Subscription'.
ã©ã€ãã©ãªãããžã§ã¯ãããnode_modulesãã£ã¬ã¯ããªãäžæçã«åé€ãããšãã¢ãžã¥ãŒã«ãèŠã€ãããªãããšã蚎ããæ°ãããšã©ãŒãçºçããŸãã
ex: Build: Cannot find module 'rxjs/Observable'.
ããã¯ãtypescriptã³ã³ãã€ã©ãã¢ããªã±ãŒã·ã§ã³ãã³ã³ãã€ã«ãããšãã«ãã¢ããªã±ãŒã·ã§ã³ã®node_modulesãã©ã«ããŒã§ã¯ãªãããªã³ã¯ãããã©ã€ãã©ãªããã±ãŒãžã®node_modulesãã©ã«ããŒã§ã©ã€ãã©ãªã®ã¢ãžã¥ãŒã«å®çŸ©ãå®éã«æ€çŽ¢ãããšããçµè«ã«å°ããŸãã
äžã§ææ¡ãããã©ã®è§£æ±ºçããã®åé¡ã®åé¿çãæäŸãããã¯ç§ã«ã¯ããããŸããã誰ããç§ãå©ããŠãããŸãããïŒ
ããããšãïŒ
@mikehutter ïŒã©ã€ãã©ãªèªäœã§ã¯ãªãïŒã©ã€ãã©ãªã䜿çšãããããžã§ã¯ãã§ãtsconfigã§æ¬¡ã®ããã«ããŸãã
"paths": {
"rxjs/*": ["../node_modules/rxjs/*"]
},
tsconfigãšãœãŒã¹ã³ãŒãã®çµæã«ãã£ãŠã¯ããããå°ã調æŽããå¿ èŠãããå ŽåããããŸãã
ïŒãã®ã¹ã¬ããã®ä»ã®äººãšåãããã«ããããäžèŠã«ããTypeScriptã®æ¹åãæåŸ ããŠããŸããïŒ
@mikehutteræè¿ããªã³ã¯ãããã©ã€ãã©ãªãæäœããããã®ã¬ã€ãã³ã¹ãAngular CLIã«è¿œå ããŸãããããªãã®å Žåãã³ã³ã·ã¥ãŒããŒã¢ããªã§RxJã®TypeScriptãã¹æ§æãæ¬ èœããŠããããã§ãã 詳现ã«ã€ããŠã¯ã httpsïŒ//github.com/angular/angular-cli/blob/master/docs/documentation/stories/linked-library.mdãåç §ããŠ
@kylecordesã¯
@kylecordesãš@filipesilvaã«æè¬ããŸãïŒ å¿ èŠãªã®ã¯ããã ãã§ãã...
ããã«ã¡ã¯ïŒ
@mhegazy ãããã§2.4ã«ãªããšæããŸããããããšããŸãé
ããå¯èœæ§ããããŸããïŒ
ãããåé¿ããã®ã¯éåžžã«é¢åã§ãããåãããžã§ã¯ãã¯ãæ¬åœã«æ°ã«ããã¹ãã§ã¯ãªããã®ã®ãã¹ãããã³ã°ãåžžã«å®çŸ©ããå¿
èŠããããŸãã
ä»åã¯ããããªãªãŒã¹ã«ãªãããšãæ¬åœã«æãã§ããŸãïŒ
ãã¹ãã
ããã«ã€ããŠã¯ãŸã èšåãããŠããªããšæããŸããããã®åé¡ãåé¿ããããã®éåžžã«ç°¡åãªæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"*": ["node_modules/*", "*"]
}
}
}
äžèšã®paths
ãšã³ããªã¯ãåºæ¬çã«æ¬¡ã®ããã«è¿°ã¹ãŠããŸããã¢ãžã¥ãŒã«ã«ã€ããŠã¯ãæåã«ãããžã§ã¯ãã®ã«ãŒãã«ããnode_modules
ãã©ã«ããŒã§æ€çŽ¢ãã次ã«éåžžã®ã«ãŒã«ã«ãã©ãŒã«ããã¯ããŸãïŒãããããã£ã¬ã¯ããªãååž°çã«ãŠã©ãŒã¯ã¢ããããŸãïŒãã€ã³ããŒããçºçããŸããïŒã
ïŒç§ãééã£ãŠããå Žåã¯èšæ£ããŠãã ãããç§ã¯ãŸã TSã®æ¯èŒçæ°ãã人ã§ãïŒã
paths
ã®ãšã³ããªã¯ã baseUrl
ã§ãã ãããã£ãŠã baseUrl
ããµããã©ã«ããŒã«èšå®ããå Žåã¯ãããã«å¿ããŠãã¹å®çŸ©ãå€æŽããå¿
èŠããããŸãã äŸãã°ïŒ
{
"compilerOptions": {
"baseUrl": "./src",
"paths": {
"*": ["../node_modules/*", "*"]
}
}
}
@fiznool fyiã¯ãç§ã®åé¿çãªãã·ã§ã³2ããã³3ïŒäžèšã®æçš¿ïŒã®äžéšã§ãã åãåã䜿çšããã·ã³ããªãã¯ãªã³ã¯ããããããžã§ã¯ããããå Žåã¯ã paths
ããããã£ãèšå®ããã ãã§ã¯äžååã§ããããšãããããŸããã
@jasonswearingenããªãã®æçš¿ã¯ç§ã®ãã®ãããã¯ããã«å æ¬çã§ã...ãããã¯ãªã¢ããŠãããŠããããšãã ãã以äžåé¡ãçºçããå Žåã¯ãå¿ ãåç §ããŠãã ããã ð
ããã¯Googleãããžã§ã¯ãã§ãèŠãããŸãã ããã§èª¬æãããŠããããã«ïŒ
https://github.com/Microsoft/TypeScript/issues/9091#issuecomment -306969543
baseUrlãšãã¹ã䜿çšããäžèšã®åé¿çã¯æ©èœããŠããªãããã§ãããtscã¯åŒãç¶ãéè€ããå®çŸ©ãååŸããpaths / baseUrl / include / exclude / etcã®çµã¿åããã¯ãããŸããã ããã§ãªããã°ãããçŽåŸãããããšãã§ããŸããã
Xã«äŸåããä»åè©çã«Xã«äŸåããYã«ãäŸåãããããžã§ã¯ããããå Žåããããã©ã®ããã«æ£åžžã«æ©èœããã®ãèå³ããããŸããtscã¯ã©ã®ããã«ããŠåå®çŸ©ã2åããŒãããªãããã«ããŸããïŒ
@esprehnããã§åé¿çã®æçš¿ãèªãããšã匷ããå§ãããŸãïŒ https ïŒ
ãã®ãªã³ã¯ã«é¢ããŠã¯ãç§ã®ãœãªã¥ãŒã·ã§ã³ïŒ2ãš3ïŒã¯ã©ã¡ãããbaseUrlãšãã¹ãèšå®ããã ãã§ã¯äžååãªã®ã§ãããã ãã®å Žåã¯ãããäžåºŠãèªã¿ãã ããã ãç°¡åãªãæ¹æ³ã¯ãœãªã¥ãŒã·ã§ã³2ã§ãããVisual Studioãä»ããŠé©åãªãå®çŸ©ãžã®ããã²ãŒãããå¯èœã«ãªããããç§ã®å¥œã¿ã¯ãœãªã¥ãŒã·ã§ã³3ã§ãã ãœãªã¥ãŒã·ã§ã³3ã®åé¡ã¯ãäŸåé¢ä¿ãã§ãŒã³ã§å€éš.d.tså®çŸ©ã1åã ãããŒãããå¿ èŠãããããšã§ãã
ãããã圹ã«ç«ãŠã°å¹žãã§ãã
+1ç§ã¯lernaã䜿çšããŠãããã¿ã€ããå«ãŸããŠãããµãäŸåé¢ä¿ã¯ããªã³ã¯ãããäŸåé¢ä¿ãä»ããŠå«ãŸããŠããå Žåããéè€ããšããŠãã©ã°ãä»ããããŸãã
å¿ èŠã«å¿ããŠã³ãŒããå ±æã§ããŸãã
Angular-CLIã®ããã«WebPackã䜿çšããŠããã®Angular-CLIpackage.jsonã«RXJS
ããã±ãŒãžã
ãã®ç¶æ³ã¯ãã·ã³ããªãã¯ãªã³ã¯ã§ã¯ãªããããŠããªãã ãã§èµ·ããããããnpm-shrinkwrap.json
äŸåé¢ä¿ã«ãããš@types/node
ã§dependencies
ã Shrinkwrapã¯ã npm
2ã€ã®åäžããŒãžã§ã³ã®@types/node
ã芪ããã±ãŒãžãšã·ã¥ãªã³ã¯ã©ãããããããã±ãŒãžã«ã€ã³ã¹ããŒã«ãããŸãã https://github.com/KingHenne/custom-tslint-formatters/issues/5ãåç
§ããŠ
ãŸãã @types/react
ã€ã³ã¹ããŒã«ãããŠããreactãããžã§ã¯ãã䜿çšããããã@types/react
䜿çšããã¢ããªã«ãªã³ã¯ãããšãã«ãããã«ééããŸããã
yarn link
-edããã±ãŒãžã§äœæ¥ããŠãããšãã«ãåãåé¡ãçºçããŠããŸããã
Rx.js
ããšã©ãŒãã¹ããŒããŠããŸããïŒ Type 'Observable<Location[]>' is not assignable to type 'Observable<Location[]>'. Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'
幞ãã芪ããã±ãŒãžãšãªã³ã¯ããã±ãŒãžã§åãRxj.s
ããŒãžã§ã³ã䜿çšããŠè§£æ±ºããŸããã
ãããã£ãŠãç§ã®å Žåã Rx.js
2ã€ã®ç°ãªãããŒãžã§ã³ãåé¡ãåŒãèµ·ãããŸããã
ããã¯ãã¢ããªããžããªã§äœæ¥ããå Žåã®å€§ããªãããã«ãŒã§ãã ããããã¯ãé ããã2.5ãžã®éãèŠã€ããããšãæ¬åœã«æãã§ããŸãã
ç·šéïŒð®
é¢çœãã ã¢ãã¬ãã¯ãã·ã³ããªãã¯ãªã³ã¯ããã¹ãŠãå ±éã®ããã±ãŒãžãã©ã«ããŒã«æ»ããããç§ã®ããŒã ããã®åé¡ã«ééããªã1ã€ã®ã·ããªãªã§ãã
ç§ã®ããŒã ã¯ãéçºäžã«ç¬èªã®å éšã©ã€ãã©ãªããªã³ã¯ãããšãã«ããã®åé¡ã«é »ç¹ã«ééããŸããã
æè¿ããããéåžžã«ããŸã軜æžããå®éã«ããªãè¯ãéçºã«ãŒããäœæãã
ãã®åé¡ã¯ç¶ç¶çã«æŒãæ»ãããŠããããã§ãã ããã¯éåžžã«å€ãã®äººã ã®ã¯ãŒã¯ãããŒãæ¬åœã«æ··ä¹±ãããã®ã§ãïŒ9448ã§ææ¡ãããŠããããã«ãã³ã¡ã³ããç¡å¹ã«ããããªã©ã®äœããã®äžæçãªä¿®æ£ãè¡ãå¯èœæ§ããããŸããïŒ
import { baz$ } from './qux';
function foo (bar$: Observable<any>) {}
foo(baz$);
> Duplicate identifier
// Makes foo's `bar$` type equal to that of `baz$`
foo(/*typescript:identicalIdentifier*/ baz$);
ãã³ã¡ã³ããç¡å¹ã«ãããã¯ãã©ãã§ãåãã£ã¹ããè¡ããããã¯ããã«åªããŠããããã§ã¯ãããŸãããããã¯ã倧èŠæš¡ãªãããžã§ã¯ãã§ã¯ããªãèŠçã§ãã äžèšã§ã次ã®ã³ã³ãã€ã©ã®å€æŽãææ¡ããŸããã
ãããã®æ¡ä»¶ããã¹ãŠåœãŠã¯ãŸãå Žåã¯ããã©ã€ããŒãã¡ã³ããŒãæã€ã¯ã©ã¹ã®TS2345ãå ±åããªãã§ãã ããã
- ãããªãã¯çœ²åã¯ãéåžžã®TypeScriptããã¯ã¿ã€ãã³ã°ã«åŸã£ãŠäºææ§ããããŸã
- ã¯ã©ã¹ã¯ãåãååãšããŒãžã§ã³ã®NPMããã±ãŒãžãã©ã«ããŒã§å®çŸ©ãããŸãïŒpackage.jsonã«ããïŒ
- ã¯ã©ã¹ã®ã¢ãžã¥ãŒã«ã®çžå¯Ÿãã¹ã¯åãã§ãïŒäŸïŒ "./ lib / blah / Bdts"ïŒ
ãããã®åºæºã®ãããããæºããããŠããªãå Žåã¯ãTS2345ãå ±åããŠãåé¡ãããŸããã
åçŽåãããä¿®æ£ãçŸåšã®ç¶æ³ãããåªããŠããŸããããšãã°ãïŒ1ã®ã¿ãæ€èšããããããtsconfigãä»ããŠãªããã€ã³ããå Žåã«éããŸãã å®è£ ããã®ã¯ããªãå®ãã¯ãã§ãã
ãã®ã¢ãããŒãã«ã¯ã誀ã£ãã¢ã©ãŒã ãç¡å¹ã«ããã ãã§ãæ¢åã®ã»ãã³ãã£ã¯ã¹ãä¿æãããšããå©ç¹ããããŸãã äžæ¹ãnode_modulesã®åãããã³ã°ããã¯ã¯ãNPMã¢ãžã¥ãŒã«ã®è§£å床ãæœåšçã«èª€ã£ãæ¹æ³ã§å€æŽããŸãïŒããšãã°ãç§ã瀺ããæ¶ç©ºã®äŸã§ã³ãŒãã誀åäœããåå ã«ãªããŸãïŒã
æ£çŽãªãšããããããTypescriptã§ãä¿®æ£ãããå¿ èŠããããã©ããããããããŸãããããã¯ããã¬ãŒã³JavaScriptã«ãåé¡ãããããã§ãããªããžã§ã¯ãã®ã¯ã©ã¹ãæäŸãããã¯ã©ã¹ãšç°ãªãå ŽåãinstanceofæŒç®åã¯falseãè¿ããŸãã
ãããã£ãŠãæåã«requireïŒïŒã«ããã¯ããå¯èœæ§ã®ããnpmãªã³ã¯ã®ããè¯ã代æ¿æ段ã楜ãã¿ã«ããŠããŸãã
ããã¯è¯ãæŽå¯ã§ãã pnpmãèŠãããšã
亀æãŸãã¯äœ¿çšã§ããªãã®ã¯npm link
ã§ã¯ãªããåã@types/xxx
ããã±ãŒãžã®è€æ°ã®ããŒãžã§ã³ãåæã«ã€ã³ã¹ããŒã«ããããšã§ãããå€ãã®å ŽåãäŸåããTypeScript宣èšãæäŸããäŸåé¢ä¿ããååŸãããŸããç§ãä»ã®äººã
ãå ±åããããã«ãæšæºçãªå®£èšã«ã€ããŠã ãã®ãããªããã±ãŒãžã®æ°ã¯ãããŒãã³ãã¥ããã£ã§ã®TypeScriptã®æ¡çšãå¢ããã«ã€ããŠå¢å ããŸãã
@Yoguããã¯çŽããããã¢ã€ãã³ãã£ãã£ãšå¹³çã ãšæããŸãã 2ã€ã®å Žæããã®åãããã±ãŒãž/ããŒãžã§ã³ã®ã€ã³ããŒãã¯ãã¿ã€ãã®2ã€ã®ç°ãªãã€ã³ã¹ã¿ã³ã¹ãè¡šãå ŽåããããŸãããã¿ã€ãã¯åãã§ãã
次ã®ïŒæå¹ãªïŒã³ãŒããæãæµ®ãã³ãŸãã
type a = { c: string };
type b = { c: string };
function foo (bar: a) {}
const baz: b = { c: 'd' };
foo(baz);
ã€ã³ããŒãããã©ã€ãã©ãªã«ãåãããšãåœãŠã¯ãŸããŸãã
ç°ãªãããŒãžã§ã³ã®ã©ã€ãã©ãªïŒããã³å¯Ÿå¿ãã@types
ããã±ãŒãžïŒããã€ã³ããŒããããã¿ã€ãã¯ãçãããŠãç°ãªã£ãŠããŠãããŸããŸããïŒã©ã€ãã©ãªãæŽæ°ããããšãã¿ã€ãå®çŸ©ãæŽæ°ãããŠå€æŽãåæ ãããŸãïŒã
ååãšããŒãžã§ã³ã«åºã¥ããŠéè€ããã±ãŒãžãæ€åºããããšããå€æŽãããŒãžãã1ã€ã ãã䜿çšããŸãã 次åå
¬éæã«typescript@next
ã䜿ã£ãŠè©ŠããŠã¿ãŠãã ããã
ããããããä¿®æ£ããŠãããŠããããšãïŒ :-)
@pgonzal pnpmãžã®ãã€ã³ã¿ãããããšããããã¯ééããªãé¢çœããã§ãïŒ
@sompylasar @types/node
ã¯å°ãç¹æ®ãªã±ãŒã¹ã§ããã @types/react
å Žåãããã«ç§ã®ææ¡ããããŸããã¢ãžã¥ãŒã«ã®APIã«å¿
èŠãªãã¹ãŠã®äŸåé¢ä¿ãpeerDependencies
ã«å
¥ããŸãã dependencies
ã¯å
¥ããŸããã ããã«ãããäŸåé¢ä¿ã®ããŒãžã§ã³ã芪ã¢ãžã¥ãŒã«ãšåã¢ãžã¥ãŒã«ã®éã§äžèŽããïŒãŸãã¯å°ãªããšãäºææ§ãããïŒå¿
èŠãããããšãæ確ã«ãªããŸãã 芪ãšåã®äž¡æ¹ãreactã䜿çšããŠããããreactã¿ã€ãã®ãªããžã§ã¯ãã亀æããªãå Žåãããã§ã®ãã®åé¡ã¯ããããçºçããŸããã
@harangueã¯ã©ã¹ãåãååãšåãæ§é ãæã€2ã€ã®ç°ãªããã¡ã€ã«ã§2å宣èšãããŠããå Žåã§ããJavaScriptã§ã¯åçãšèŠãªãããªã2ã€ã®ç°ãªãã¯ã©ã¹ããããŸãã åè¿°ããããã«ã instanceof
æŒç®åã¯ã2ã€ã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãåºå¥ããŸãã
ãã¢ã«ã€ããŠã¯ããã®ãã£ãã«ãåç §ããŠãã ããã
ããããTypeScriptãããNPMã¬ãã«ã§ããã解決ãããçç±ã§ãïŒãããã£ãŠãæå³ãããŠããªãå Žåã¯ãããããè€æ°ã®å®£èšã¯ãããŸããïŒã
@Yogu ïŒ+1ïŒãããã£ãŠã @types/node
ãç¹æ®ãªã±ãŒã¹ã§ããå Žåãã€ãŸã2ã€ã®ç°ãªãããŒãããŒãžã§ã³ãåæã«äœ¿çšããŠããã°ã©ã ãå®è¡ã§ããªãå Žåãããã¯1ã€ã®ããŒãžã§ã³ã«ãªããããããã§æå®ãããããŒãžã§ã³ã«ãªããŸãããããã¬ãã«ã®ããã±ãŒãžãå€åTypeScriptã¯ãããç¹å¥ãªå ŽåãšããŠæ±ãã¹ãã§ããäŸãã°åžžã«ãã¹ãŠã®äŸåé¢ä¿ã«ãããã¬ãã«ã®@types/node
ã䜿çšããŸããïŒ
@ andy-msããããšãããããŸãïŒ
次åå ¬éæã«typescript @ nextã䜿ã£ãŠè©ŠããŠã¿ãŠãã ããã
ããã¯ãŸã èµ·ãã£ãŠããªããšæããŸãã ç§ã¯ããã€ãã®ãããžã§ã¯ãã§ãããè©ŠããŸããããä»ã®ãšããéããããŸããã next
ãå©çšå¯èœã«ãªã次第ããã®ã¹ã¬ããã§æŽæ°ã確èªã§ãããšäŸ¿å©ã§ãã @ andy-ms
ãã€ãªãŒãã«ããåã³åæ¢ããããã§ãã æåŸã¯2.5.0-dev.20170808
ã
cc / @DanielRosenwasser
ãããé¢é£ããŠãããã©ããã¯ããããŸãããã2.5.1ãè©ŠããŠã¿ããšãä»ã®å Žæã«d.tsãæ¡åŒµãããŠããå Žåã§ããã¢ãžã¥ãŒã«ã®1ã€ã®åŽé¢ãã衚瀺ãããªãããã§ãã
äœãã«@types
ãããå Žåã @types/mongodb
ãšããŸãããããã®ã¢ãžã¥ãŒã«ãæ¡åŒµããã«ã¹ã¿ã 宣èšãããå Žåãã€ãŸãã¡ãœããã«çŽæãè¿œå ããå Žåã @types/mongodb
ãããŸããã¢ãžã¥ãŒã«mongodb
ãšã mongodb
ã¢ãžã¥ãŒã«ãå«ãmongo-promisification.d.ts
ãããªååã®d.tsãã¡ã€ã«ããããžã§ã¯ãã«ãããŸãã
ãããã£ãŠãäžèšã®ã·ããªãªã§ã¯ã import {somethingFromTypes} from "mongodb"
ãå«ããã¡ã€ã«ããããtypesã¢ãžã¥ãŒã«ããã®ããŒã¿ãååšããæå¹ã§ããã«ããããããèŠã€ãããªããšæå¥ãèšããŸããã import {somethingFromMyExtendingDts} from "mongodb"
ãå®è¡ããå Žåã¯æ©èœããŸã倧äžå€«ã
ã³ã³ãã€ã«ãããšãã¢ãžã¥ãŒã«ã¯ãã®ãããªãã®ããšã¯ã¹ããŒãããªããšèšãããŸããããšã¯ã¹ããŒãããå Žåã¯ããã®æãŸããåäœã§ãããã«ã¹ã¿ã d.tsã§åãšã¯ã¹ããŒãããå¿ èŠããããŸãããŸãã¯ãã¿ã€ããšæ¡åŒµåd.tsã®äž¡æ¹ãåã蟌ãå¿ èŠããããŸããç§ã¯æã£ãŠããŸãïŒ
ææ°ã®ãã¹ããã«ãïŒWindows 10 64ãããïŒãå®è¡ããŠããŸãããããã¯ä¿®æ£ãããŠããªãããã§ãã
a/
index.ts
package.json
b/
index.ts
package.json
cd a
npm link
cd ../b
npm link a
import { Observable } from 'rxjs/Observable';
export class Foo {
public bar: Observable<any>;
}
import { Foo } from '@rxjs-test/a';
import { Observable } from 'rxjs/Observable';
const baz = new Foo();
function qux (quux: Observable<any>) {}
// TypeError
qux(baz.bar);
b>tsc -v
Version 2.6.0-dev.20170826
b>tsc index.ts
index.ts(11,5): error TS2345: Argument of type 'Observable<any>' is not assignable to parameter of type 'Observable<any>'.
Property 'source' is protected but type 'Observable<T>' is not a class derived from 'Observable<T>'.
@grofitããªãã®ç¶æ³ã§ã®åé¡ã¯ãã¢ãžã¥ãŒã«ã®2ã€ã®å®£èšãããããšã ãšæããŸããå¿
èŠãªã®ã¯ãã¢ãžã¥ãŒã«ãšæ¡åŒµã§ãã
次ã®ããã«mongo-promisification.d.ts
ãå®è¡ã§ããã¯ãã§ãã
import * as mongodb from "mongodb"; // import the real mongo
// now augment it
declare module "mongodb" {
// new stuff...
}
import
ããªããšãã¢ã³ããšã³ãã³ã³ããã¹ãã«ãªããæ¡åŒµã§ã¯ãªãæ°ãã宣èšãèšè¿°ããŸãã
ïŒãã³ãããã¯åç §ïŒ
[email protected]
䜿çšããŠããããæ©èœããŠããããšã確èªã§ããŸãã @ andy-msã«æè¬ããŸã-ããã¯ã²ãŒã ãã§ã³ãžã£ãŒã§ãïŒ
Observableãã€ã³ããŒããããšãã«åãåé¡ãçºçããŸãã
`` `function getitemsïŒïŒïŒObservable
http.getïŒïŒãmapïŒresponseïŒResponseïŒ=> {
æ»ã
}
and when I removed the Observable<T> from function getitems() to not return anything the error disappear.
```function getitems()
http.get().map(response : Response) =>{
return <T> response.json();
}
@ Basel78ãšã©ãŒãåçŸããã«ã¯ãå®å
šãªäŸãå¿
èŠã§ãã ãŸãã typescript@next
ã䜿çšããŠããããšã確èªããŠãã ãããangular-cliã§ã¯ãéè€æé€æ©èœããªãå€ãããŒãžã§ã³ã䜿çšããŠããå¯èœæ§ããããŸãã
[email protected]ãè©ŠããŸããããããã§ãå€ãã®ãšã©ãŒãçºçããŸãTS2300ïŒèå¥åãéè€ããŠããŸãã
æ®å¿µãªããããããžã§ã¯ãå
šäœãå
±æããããšã¯ã§ããŸããã ããããããã«ããã€ãã®è©³çŽ°ããããŸãïŒ
npm-link-edããã±ãŒãžã®tsconfigïŒ
"compilerOptions": {
"module": "amd",
"target": "es3",
"sourceMap": true,
"noEmitHelpers": true,
"experimentalDecorators": true,
"baseUrl": ".", // This must be specified if "paths" is.
"paths": {
"lib/*": [ "src/lib/*" ],
"modules/*": [ "src/modules/*" ],
"vendor/*": [ "src/vendor/*" ]
},
"typeRoots" : ["src/typings"]
},
"include": [
"src/**/*.ts",
"src/**/.*.ts", // TS ignores file names starting with dot by default
"tests/**/*.ts",
"tests/**/.*.ts"
]
ã¡ã€ã³ãããžã§ã¯ãã®tsconfigïŒ @croc/webclient
ã¯ãªã³ã¯ãããããã±ãŒãžã§ãïŒïŒ
"extends": "./node_modules/@croc/webclient/tsconfig",
"include": [
"src/**/*.ts",
"src/**/.*.ts",
"node_modules/@croc/webclient/src/**/*.ts",
"node_modules/@croc/webclient/src/**/.*.ts"
],
"compilerOptions": {
"baseUrl": ".",
"typeRoots" : ["node_modules/@croc/webclient/src/typings"],
"paths": {
// map runtime paths to compile-time paths
"lib/*": [ "node_modules/@croc/webclient/src/lib/*" ],
"modules/*": [ "node_modules/@croc/webclient/src/modules/*" ],
"vendor/*": [ "node_modules/@croc/webclient/src/vendor/*" ]
}
}
@ evil-shrikeãããžã§ã¯ãããåé¡ã瀺ãç°¡åãªäŸã«æžããããšãã§ããŸããïŒ
@mhegazyããã«ãããŸã
https://github.com/evil-shrike/typescript-npmlink-issue
ãããžã§ã¯ãã«ãŒãïŒ
cd lib
npm link
cd ../main
npm link tstest-lib
次ã«main
ïŒ
npm run tsc
ããã«ã¡ã¯@ evil-shrikeãç§ã¯åé¡ã以äžã«çµã蟌ã¿ãŸããïŒ
lib / tsconfig.json
{
"compilerOptions": {
"typeRoots" : ["src/typings"]
}
}
main / tsconfig.json
{
"extends": "./node_modules/tstest-lib/tsconfig",
"include": [
"node_modules/tstest-lib/src/**/*.ts"
]
}
ãããã£ãŠãäž¡æ¹ãå«ããããšã«ãªããŸãïŒ tsc --listFiles
ïŒïŒ
/main/node_modules/tstest-lib/src/typings/jquery/index.d.ts
/lib/src/typings/jquery/index.d.ts
以æ¥node_modules
ããæ¥ãŠããinclude
ããã³ã¢ãžã¥ãŒã«ã®è§£å床ãããç§ãã¡ãåŒã¶ãšã¯æããªãã§ã¯ãªãrealpath
ãããã¯äºã€ã®ç°ãªãå«ãŸããŠãããã¡ã€ã«ãšããŠçµããã®ã§ããã®äžãã
ãšã«ããnode_modules
å«ããã代ããã«ããããåå¥ã«ã³ã³ãã€ã«ããŠãä»ã®å€éšããã±ãŒãžãšåãããã«ã€ã³ããŒãããããšããå§ãããŸãã
@ andy-ms
ç°¡åãªããšã§ã¯ãããŸããã ç§ã®å Žåãåç
§ãããlibã«ã¯ãããšãã°ã°ããŒãã«ã€ã³ã¿ãŒãã§ã€ã¹ãæ¡åŒµããã¢ã³ããšã³ãd.tsããããããããŸãã JQueryStaticã®ããã«ïŒ
interface JQueryStatic {
cleanData (elems);
}
ãŸãã¯ããŒãããããã¬ãã£ãã¯ã¹ã宣èšããŸãïŒrequirejsïŒïŒ
declare module "i18n!*" {
//const m: { [key: string]: string };
const m;
export = m;
}
次ã«ãlibã®ãœãŒã¹ã®ã©ããã§ãããã䜿çšããŸãã
const oldCleanData = $.cleanData;
$.cleanData = function (elems: JQuery) {
..
oldCleanData(elems);
};
ãã®ãããªã¢ãžã¥ãŒã«ïŒlibããïŒãmainã®ã©ããã«ã€ã³ããŒãããããšãã³ã³ãã€ã«ã«å€±æããŸãã
ã©ã€ãã©ãªã®ãœãŒã¹ã§ã¯ã /// <reference types="" />
ïŒãŸãã¯/// <reference path="" />
ïŒãã£ã¬ã¯ãã£ãã䜿çšããŠãã©ã€ãã©ãªãã€ã³ããŒãããããã³ã«å¿
èŠãªåãååšããããšã確èªããå¿
èŠããããŸãã ããããã°ããå«ãããå¿
èŠã¯ãããŸããã ã€ã³ããŒãããããšãåç
§ãããŠããã¿ã€ãããããžã§ã¯ãã«èªåçã«è¿œå ãããŸãã
@ andy-msããããšããlibããªãã¡ã¯ã¿ãªã³ã°ããnpm-link-edãæ£åžžã«ã³ã³ãã€ã«ãããŠãããããžã§ã¯ãã«ãªããŸããã
ãããã倧ããããè€è£œã§ãããã©ããã¯ããããŸãããã Observable<T> !== Observable<T>
ããããã«angular @nextãš
https://github.com/intellix/angular-cli-red
https://github.com/intellix/angular-cli-blue
éã¯èµ€ããã³ã³ããŒãã³ããšãµãŒãã¹ãã€ã³ããŒãããŠäœ¿çšããŸã
@intellix tsc
ã³ãã³ãã©ã€ã³ã®ã¿ã䜿çšããŠãšã©ãŒãçºçããäŸãååŸã§ããŸããïŒ ã¿ã€ãã¹ã¯ãªããng
ã®ã©ã®ããŒãžã§ã³ã䜿çšãããŠãããããããŸããã
@ andy-msãŸã ãã®åé¡ãçºçããŠããŸãã ããã¯ãæ§ç¯ããŠããvscode
æ¡åŒµæ©èœéã§npmãªã³ã¯ã䜿çšããããšãããšãã«çºçããŸãã ãããã¯ãã¹ãŠvscode
ãã€ã³ããŒããããããéè€ããèå¥åãšã©ãŒãçºçããŸãã
TS Version 2.7.0-dev.20171118
ç§ã®å Žåãããšãã°ãrxjs / *ãããtsconfigãã¡ã€ã«ã®pathsã»ã¯ã·ã§ã³ã«ããnode_moduleså
ã®ç¹å®ã®rxjsãã©ã«ããŒã«ãããããŸããã
ããã§ãnpmãªã³ã¯ã§ãã¹ãŠãæ£åžžã«æ©èœããŸãã
ãŸããããŒãžã§ã³æŽæ°ãªã³ã¯ããããã±ãŒãžãžã®ã·ã³ããªãã¯ãªã³ã¯ããéã·ã³ããªãã¯ãªã³ã¯ã«ç§»è¡ãããšãã«ãããçºçããããšã確èªããŸããã
ãã®SOã®è³ªåãåç §ããŠãã ããïŒ https ïŒ
@ dakaraphi @ JoshuaKGoldbergãããã®ã·ããªãªãåçŸããããã®æé ãæããŠãã ããã
æ°ããåäœã§ã¯ã package.json
åããããŒãžã§ã³ãå€ãæã€å¥ã®ããã±ãŒãžããã§ã«è¡šç€ºãããŠããå Žåã¯ãããã±ãŒãžãå«ããªãã§ãã ããã ããŒãžã§ã³ãç°ãªãè€æ°ã®ã€ã³ã¹ããŒã«ãããå Žåã¯ãã¢ãžã¥ãŒã«ã®2ã€ã®ç°ãªãã³ããŒãååŸããŸãã ããã¯ã2ã€ã®ã€ã³ã¹ããŒã«ã®ãã¡ã®äžæ¹ã«ã®ã¿åœ±é¿ããå ŽåãããŒãžã§ã³æŽæ°ããããå£ãçç±ã説æããŠããå¯èœæ§ããããŸãã
@ andy-msç§ãæã£ãŠããäŸã¯ã次ã®ãªããžããªã§ãã
ããŒã«ã«ã®npminstallã䜿çšããŠã vscode-extension-common
ããvscode-extension-fold
vscode-extension-common
ãåç
§ããŸã
ãããã®ãªããžããªããã§ãã¯ã¢ãŠããããšã package.json
ã®vscode-extension-fold
package.json
ã«ãã¹ãããã³ã°ã®åé¿çããããããçŸåšã¯æ©èœããŠããŸãã ãã ããæ£ããç解ããŠããã°ããã®åé¿çã¯å¿
èŠãããŸããã
@dakaraphiããããšãïŒ ãã®ãšã©ãŒã¯ã vscode.d.ts
ãå€éšã¢ãžã¥ãŒã«ãšããŠã§ã¯ãªããã°ããŒãã«ãªã¢ã³ããšã³ã宣èšãšããŠæžã蟌ãŸããŠããããšãåå ã®ããã§ãã Microsoft / vscode-extension-vscodeïŒ90ãäœæããŸããã
ãããããrxjs
äŸåããŠãã2ã€ã®ããã±ãŒãžããªã³ã¯ããããšãããšãããã¯ãŸã æ©èœããŸããã [email protected]
ãš[email protected]
ãŸãã ã©ã¡ãã®ããã±ãŒãžããŸã£ããåãããŒãžã§ã³ã䜿çšããŠããŸãã 誰ããããã®åé¿çãæã£ãŠããŸããïŒ
@SamVerschuerenãšã©ãŒãåçŸããããã®å
·äœçãªæé ãæããŠãã ããã ãŸãã typescript@next
ãã¹ãããŸãã
@ andy-msäœãã§ãããèŠãŠãããŸãïŒ
@ andy-msããã¯å°ããªè€è£œãªããžããªhttps://github.com/SamVerschueren/ts-link-6496ã§ãã ãããåçŸããããã«[email protected]
ã䜿çšããŸããã
mod-a
ãšmod-b
äž¡æ¹ã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«ããŸãmod-b
ãyarn build
ã³ã³ãã€ã«ããŸãmod-a
ãyarn build
ã³ã³ãã€ã«ããŸãã¹ããã3ã¯æ¬¡ã®ãšã©ãŒã§å€±æããŸã
src/index.ts(7,15): error TS2345: Argument of type 'UnaryFunction<Observable<string>, Observable<string>>' is not assignable to parameter of type 'UnaryFunction<Observable<string>, Observable<string>>'.
Types of parameters 'source' and 'source' are incompatible.
Type 'Observable<string>' is not assignable to type 'Observable<string>'. Two different types with this name exist, but they are unrelated.
Property 'buffer' is missing in type 'Observable<string>'.
src/index.ts(7,47): error TS7006: Parameter 'result' implicitly has an 'any' type.
[email protected]ã§ãŸã ãã®åé¡ãçºçããŠãtypescript @ nextãè©ŠããŸããããåãåé¡ãçºçããŸããã
åé¡ã®æ ¹æ¬ã¯ããªã³ã¯ãããããã±ãŒãžããå¯èœã§ããã°ããªã³ã¯å
ã®node_modules
ããã®åã䜿çšããã®ã§ã¯ãªããç¬èªã®ããŒã«ã«node_modules
ã®åå®çŸ©ãåç
§ããŠããããšã§ãã ããã¯æ¬¡ã®äºå®ãšçµã¿åããããŸããïŒ
node_modules
ãšãªã³ã¯ãããããã±ãŒãžã®node_modules
äž¡æ¹ã§ã°ããŒãã«ãå®çŸ©ãããŠããå Žåãã³ã³ãã€ã©ã¯æå¥ãèšããŸããnode_modules
ã®ã¯ã©ã¹ã§ããå€æ°ããåãç¬èªã®node_modules
å®çŸ©ãããŠãããªã³ã¯ãããããã±ãŒãžã«ãã£ãŠè¿ãããå€ã«å²ãåœãŠãããšãããšãã³ã³ãã€ã©ãæå¥ãèšããŸããpaths
å€æ°ã䜿çšããŠããã®åé¡ãåé¿ããããšãã§ããŸããã ããã§ææ¡ãããŠ@types/*
ããã®ãã®ã§ããã¢ãžã¥ãŒã«ã®å Žåã次ã䜿çšããã ãã§ãã
"paths": {
"*": ["node_modules/@types/*", "*"]
}
ã¯ã©ã¹ãŸãã¯ã°ããŒãã«ãå®çŸ©ããåå®çŸ©ããã³ãã«ãããŠããããã±ãŒãžã§ãã®åé¡ãçºçããå Žåã¯ãããããæåã§è¿œå ããå¿
èŠããããŸãã ããšãã°ã rxjs
ïŒ
"paths": {
"rxjs": ["node_modules/rxjs"],
"rxjs/*": ["node_modules/rxjs/*"]
}
TS 2.8.3ã䜿çšããŠããŒã«ã«ããã±ãŒãžãè¿œå ãããšãã·ã³ããªãã¯ãªã³ã¯ã§åé¡ãçºçããŸãã
},
"devDependencies": {
"@types/MyLib": "file:../MyLib/bin/npm/@types"
},
v3以éãnpmã¯ãã¡ã€ã«ãã³ããŒãã代ããã«ã·ã³ããªãã¯ãªã³ã¯ã䜿çšããŠããããã€ã³ã¹ããŒã«ããŠããããã§ãã
ãã ããã³ã³ãã€ã«ããããšãããšãã³ã³ãã€ã©ãŒã¯ãªã³ã¯ãããå®çŸ©ãã¡ã€ã«ã2ã€ã®å¥åã®ç«¶åãããã¡ã€ã«ãšããŠèªèããŸãã
node_modules\@types\MyLib\index.d.ts(3,11): error TS2300: Duplicate identifier 'Foo'.
C:/MySolution/MyLib/bin/npm/@types/index.d.ts(3,11): error TS2300: Duplicate identifier 'Foo'.
代ããã«æåã§ãã¡ã€ã«ãã³ããŒãããšãæåŸ
ã©ããã«æ©èœããŸãã typeRoots: ["./node_modules/**/"]
èšå®ããããšã§ãããåé¿ã§ããŸã
æãåèã«ãªãã³ã¡ã³ã
ååãšããŒãžã§ã³ã«åºã¥ããŠéè€ããã±ãŒãžãæ€åºããããšããå€æŽãããŒãžãã1ã€ã ãã䜿çšããŸãã 次åå ¬éæã«
typescript@next
ã䜿ã£ãŠè©ŠããŠã¿ãŠãã ããã