2017-02-14 1 views
1

Compte tenu d'un module comme celui-ci:Générer un type de propres clés exportées d'un module

export const a: string; 
export const b: string; 

De l'extérieur, vous pouvez générer un type "a" | "b" comme ceci:

import * as stuff from "./stuff"; 
type StuffKeys = keyof typeof stuff; // "a" | "b" 

Mais je veux générer et exporter ce type de dans le module. Quelque chose comme:

export type MyKeys = keyof typeof this; 

Mais cela ne fonctionne pas.

Existe-t-il un moyen de le faire?

Répondre

2

Je ne croyais pas, que ce que vous avez l'intention de faire était possible, car la ligne export type MyKeys... aurait besoin d'être inclus dans le type de clés lui-même. Cependant, il est surprenant de constater que cela fonctionne simplement pour importer le module et exporter les clés à partir de là.

main.ts

export const a : string = 'a'; 
export const b : string = 'b'; 

import * as main from './main' 
export type MyKeys = keyof typeof main; 

test.ts

import {MyKeys} from './main'; 

const a : MyKeys = 'a'; 
const b : MyKeys = 'c'; // TS2322: Type '"c"' is not assignable to type '"a" | "b"'.