Skip to content

Commit

Permalink
Merge pull request #7 from sveyret/bettertyping
Browse files Browse the repository at this point in the history
Improve typings
  • Loading branch information
sveyret committed Nov 20, 2019
2 parents b6246c7 + bbd0ab3 commit 870d4aa
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 31 deletions.
4 changes: 3 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "intl-ts",
"version": "4.0.1",
"version": "4.0.2",
"description": "Internationalization library for TypeScript",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
Expand Down Expand Up @@ -47,6 +47,8 @@
"keywords": [
"internationalization",
"internationalisation",
"localization",
"localisation",
"intl",
"i18n",
"library",
Expand Down
6 changes: 3 additions & 3 deletions src/Intl.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { LanguageMap } from './LanguageMap'
import { MessageFunction, Messages, PartialMessages } from './Messages'
import { MessageFunction, Messages, PartialMessages } from './MessageTypes'

/**
* The default functions and data for the Intl object.
Expand Down Expand Up @@ -81,7 +81,7 @@ function calculatePreferences(
}

/*
* Try to load the `mobx` library. If succeeded, will give the ability to create observable properties.
* Try to load the `mobx` library. If succeed, will give the ability to create observable properties.
*/
let mobx: typeof import('mobx') | undefined
try {
Expand Down Expand Up @@ -186,7 +186,7 @@ Intl.prototype.$getMessageFunction = function<T extends Messages, K extends keyo
for (const preference of this.$preferences) {
const language: Readonly<PartialMessages<T>> = this.$languageMap.messages(preference)
if (name in language) {
message = language[name] as T[K]
message = (language as T)[name]
break
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/LanguageMap.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import { expect } from 'chai'

import { LanguageMap } from '.'
import { PartialMessages } from './Messages'
import { PartialMessages } from './MessageTypes'

// English version — default
export const en = {
Expand Down
7 changes: 3 additions & 4 deletions src/LanguageMap.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import { Messages, PartialMessages } from './Messages'
import { Messages, PartialMessages } from './MessageTypes'

/**
* Definition of a language map (the object containing messages for each languages).
*/
export interface LanguageMapDefinition<T extends Messages> {
export type LanguageMapDefinition<T extends Messages> = {
default: T
[lang: string]: PartialMessages<T> | 'default'
}
} & Omit<{ [lang: string]: PartialMessages<T> | 'default' }, 'default'>

/**
* The language map contains a list of messages for each supported language. A LanguageMap is immutable.
Expand Down
23 changes: 23 additions & 0 deletions src/MessageTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* A simple message may be either directly a string or a function.
*/
export type Message = string | ((...args: any[]) => string)

/**
* A message converted into a function.
*/
export type MessageFunction<T extends Message> = T extends string ? () => string : T

/**
* The available messages for a given language.
*/
export type Messages = {
$: string // The language name itself
} & Omit<{ [key: string]: Message }, '$'>

/**
* The available messages for a given language.
*/
export type PartialMessages<T extends Messages> = {
$: string
} & Partial<Omit<T, '$'>>
21 changes: 0 additions & 21 deletions src/Messages.ts

This file was deleted.

2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
export { Messages, PartialMessages } from './Messages'
export { Message, Messages, PartialMessages } from './MessageTypes'
export { LanguageMapDefinition, LanguageMap } from './LanguageMap'
export { Intl as default } from './Intl'

0 comments on commit 870d4aa

Please sign in to comment.