2017-04-14 4 views
1

Here is SystemJS + TypeScript plunk ignoriert, von official Angular plunk template erstellt.Typoskript Typ Fehler werden

Wie es zeigt, es alle Fehler Typoskript Typ ignoriert, das einzige, was auf die Konsole angemeldet ist, ist foo:

main.ts

const foo: boolean = 'foo'; 

console.log(foo); 

config.js

System.config({ 
    //use typescript for compilation 
    transpiler: 'typescript', 
    //typescript compiler options 
    typescriptOptions: { 
    emitDecoratorMetadata: true 
    }, 
    paths: { 
    'npm:': 'https://unpkg.com/' 
    }, 
    //map tells the System loader where to look for things 
    map: { 

    'app': './src', 
    ... 
    }, 
    //packages defines our app package 
    packages: { 
    app: { 
     main: './main.ts', 
     defaultExtension: 'ts' 
    }, 
    ... 
    } 
}); 

index.html

... 
<script src="https://unpkg.com/[email protected]/dist/system.js"></script> 
<script src="config.js"></script> 
<script> 
System.import('app') 
    .catch(console.error.bind(console)); 
</script> 
... 

Generell würde ich TypeScript bevorzugen, um die Anwendungsausführung zu stoppen und Typfehler zu werfen.

Was ist falsch an dieser Einrichtung? Warum werden TypeScript-Fehler unterdrückt? Wie kann dieses Setup geändert werden?

+0

Es gibt nichts falsch mit dem Setup ist, es ist nur nicht so einfach Typprüfung im Browser zu bekommen, weil jemand alle Typdefinitionen vom Compiler im Browser irgendwie erforderlich bereitstellen muss. Um dieses Problem zu umgehen, verwendet SystemJS 'transpileModule()' Typescript-Methode, die keine Prüfung von Design zu überprüfen. Für 0.19 können Sie [plugin-typescript] (https://github.com/frankwallis/plugin-typescript) verwenden und die Option 'typeCheck' auf 'true' setzen, aber beginnend mit SystemJS 0.20 [dies ist nicht mehr möglich] (https : //github.com/frankwallis/plugin-typescript/issues/194). Ich bin zu Webpack gewechselt. – artem

+0

@artem Danke, gut zu wissen. 0,20 ist ein Show-Stopper aus verschiedenen Gründen, aber wahrscheinlich [es gibt noch Hoffnung] (https://github.com/frankwallis/plugin-typescript/issues/185#issuecomment-275999466) hier, ich bin mir nicht sicher. Hast du eine Idee, wie der Plunk aktualisiert werden sollte, um Plugin-Typescript zu verwenden? [Ich bin gelandet] (https://plnrkr.co/edit/xNOvL4efra2IGEUaQxpe?p = info) mit 'TypeError: AMD-Modul https://unpkg.com/[email protected]/lib/typescript.js hat keinen Fehler definiert. – estus

Antwort

1

Sie können plugin-typescript für SystemJS verwenden, das ab Version 6 die Möglichkeit bietet, die Typprüfung im Browser zu aktivieren (beachten Sie, dass this option is removed in version 7).

Aber Sie müssen dieses Plugin confiure genau wie in seiner readme buchstabiert, das heißt, haben typescript Paket in SystemJS Config mit main und meta wie folgt aus:

typescript: { 
    "main": "lib/typescript.js", 
    "meta": { 
    "lib/typescript.js": { 
     "exports": "ts" 
    } 
    } 
} 

Dann wegen dieser main, Sie müssen typescript im map zu

Dann
'typescript': 'npm:[email protected]' 

ändern, können Sie auch diesehinzufügen müssen:

unpkg.com/[email protected]/lib/plugin.js:498 TypeScript [Error] 
Type '"foo"' is not assignable to type 'boolean'. (TS2322) 

Aber ich glaube nicht, gibt es eine Möglichkeit der Programmausführung auf Typfehler zu stoppen - noEmitOnErrors hat keine Wirkung:

experimentalDecorators: true, 
typeCheck: true 

Nach diesen Änderungen Typfehler in der Konsole wird gedruckt für Plugin-Typescript, soweit ich das beurteilen kann.

I aktualisiert gespeicherte zupfen here, keine Ahnung, wie lange wird es bleiben.

+0

Ich schätze das sehr. Klappt wunderbar. Ich habe die Arbeit plunk auf https://plnrkr.co/edit/hzHAddtsCJZAZkMRRtHS?p=preview gegabelt, falls Sie bereit sind, es zu löschen. – estus