die Winkel Vorlagen sind HTML und sind in keiner Weise für die Kontrolle dieser in Typoskript angeschlossen. Und selbst in Typoskripten ist es möglich, die Typdeklaration zu umgehen, z. this.labelSize = 'whatever' as any
.
Am Ende ist der Code immer noch Javascript. Und in den Vorlagen ist es genauso, als würde man von Anfang an einfaches JavaScript verwenden.
Wenn Sie wirklich Mismatches aufholen vorne wollen, einige mögliche Lösungen sind:
1. Validierung
Wie bereits angedeutet, führen Sie eine manuelle Validierung oder eine Validierung Bibliothek verwenden Einschränkungen angeben, z.B. https://validatejs.org/
Übrigens, Sie können auch eine Pipe verwenden, um die Validierung bei jedem Ihrer Werte hinzuzufügen und mehr Klarheit in Ihrem HTML zu haben.
2. Config-Objekte
Sie die Konfiguration von Komponenten erfassen kann, wo Typen sind wichtig in einem Objekt, als solche
@Input() public config: {
labelSize: 'small' | 'normal' | 'large';
} = { labelSize: 'normal' }
und binden dann die Eingabe zu myCompConfig
:
<my-component [config]="myCompConfig"></my-component>
dann in Ihrem Controller, wo Sie es verwenden
this.myCompConfig = { labelSize: 'whatever' } // error <- type is enforced now
3. TS für Vorlagen
können Sie TS für Vorlagen anstelle von HTML verwenden, und unterstützen sie mit irgendeiner Art Info:
Teile deine Art erste
export type LabelSize = 'small' | 'normal' | 'large'
@Input() public labelSize: LabelSize = 'normal';
Meine Vorlage.ts
const labelSize: LabelSize = 'whatever' // error <- type is enforced
export const template = `
<my-component labelSize=${labelSize}></my-component>`
`;
dann in Ihrer Komponente direkt
import { template } from './my-template.ts';
@Component({ selector: 'something', template })
Hinweis verwenden, um dies auch für die Erstellung von Teilen der Tempel in eine Fabrik-Ansatz extrahiert werden können, beispielsweise Sie können eine Factory zum Erstellen dieses Elements basierend auf einem labelSize-Parameter erstellen (und dieser Parameter kann Typinformationen haben).
Erste Annäherung ist keine Option. Ich meine, wir verwenden Typoskript im Wesentlichen wegen der Typvalidierung. Wenn es mit etwas so Einfachem wie einer eckigen Vorlage nicht fertig wird, verliert es das meiste seines Interesses. Zweitens ist es annehmbarer, denke ich, irgendwie schwer und sehe wie ein Hack aus. Die dritte Idee ist im Grunde React. Danke für diese Ideen, ich werde sie noch ein wenig genauer prüfen. –
:) Ja, ich stimme dieser Bewertung zu, obwohl ich die 3. Option nicht direkt reagieren wollte. Ich habe das gleiche Problem mit eckigen 2 und Typoskript, vielleicht fehlt mir etwas, aber bis jetzt in Typoskript scheint es, es ist genug, um einige Teile fehlende Typ Info zu haben und es kann andere Teile in der Kette vermasseln - und am Ende was auch immer Sie tun, es deckt nur einige x% der Anwendung, so dass ich in ständiger Angst vor Typfehlern lebe, die nicht gefangen werden; Es scheint, dass TS ein Kompromiss ist, kein vollständiges typsicheres System, was in der Tat nicht vollständig sein kann, da die zugrundeliegende Laufzeitsprache immer noch hochdynamisch ist –