Wenn Sie überprüfen, dass die Saiten die genauen Saiten der Art sind, oder wenn Sie prüfen, ob sie nicht die Saiten, die nicht im Key
Typ sind es funktioniert:
export type Key = 'features' | 'special';
export type TabTypes = 'info' | 'features' | 'special' | 'stars';
function activeTabChanged(event: TabTypes) {
var activeTab: TabTypes = event;
if(event != 'info' && event != 'stars') {
let key: Key = event;
}
// OR
if(event == 'features' || event == 'special') {
let key: Key = event;
}
}
bearbeiten
Das Problem mit dem type
d Definition ist, dass es zur Kompilierungszeit gelöscht wird, so dass es zur Laufzeit keine Möglichkeit gibt, die Überprüfung durchzuführen. Ein ausführlicher Weise die Enum Basis auf dieser page deklarieren und eine Schutzvorrichtung kann acieve die Wirkung helfen:
/** Utility function to create a K:V from a list of strings */
function strEnum<T extends string>(o: Array<T>): {[K in T]: K} {
return o.reduce((res, key) => {
res[key] = key;
return res;
}, Object.create(null));
}
const Key = strEnum([
'features',
'special',
])
type Key = keyof typeof Key;
function isKey(key: string) : key is Key {
return Key[key] !== undefined;
}
export type TabTypes = 'info' | 'features' | 'special' | 'stars';
function activeTabChanged(event: TabTypes) {
var activeTab: TabTypes = event;
if(isKey(event)) {
let key: Key = event;
}
}
Dieses Beispiel ist es wert, wenn die Aufzählungen groß sind, ansonsten wird die erste Version könnte genauso gut funktionieren.
Der Typ String sein wird, das ist nicht das Problem –