typescript - def-fil för objektexport och typer
Okej, så vi har ett Node-modul string-similarity som exporterar två funktioner på detta sätt (se: https://github.com/aceakash/string-similarity/blob/master/compare-strings.js#L7-L8 )
module.exports = { compareTwoStrings, findBestMatch }
Jag har satt ihop en definitionsfil som fungerar ganska bra, förutom att jag inte kan få åtkomst till typerna.
declare module "string-similarity" {
function compareTwoStrings(string1: string, string2: string): number;
function findBestMatch(string: string, targetStrings: string[]): Result;
interface Result {
ratings: Match[];
bestMatch: Match;
}
interface Match {
target: string;
rating: number;
}
export { compareTwoStrings, findBestMatch };
}
Jag är väldigt ny på Typescript så min fråga är denna: borde jag kunna importera dessa typer? Det skulle jag tro. Och också, finns det ett idiomatiskt korrekt sätt att skapa denna def-fil?
Uppdatera
Jag lyckades få intellisense i VSC att tro att jag hade löst problemet, men jag får fortfarande felet TypeError: Cannot read property 'compareTwoStrings' of undefined. Även om jag kan se metoderna utan problem och inga röda understrykningar.
index.d.ts
declare module "string-similarity" {
namespace similarity {
function compareTwoStrings(string1: string, string2: string): number;
function findBestMatch(string: string, targetStrings: string[]): Result;
}
export interface Result {
ratings: Match[];
bestMatch: Match;
}
export interface Match {
target: string;
rating: number;
}
export default similarity;
}
string-similarity.spec.ts
import similarity from "string-similarity";
import { Result, Match } from "string-similarity";
describe("compare two strings", () => {
it("works", () => {
const string1 = "hello";
const string2 = "dello";
const result: number = similarity.compareTwoStrings(string1, string2);
expect(result).toBe(0.75);
});
});
Svar #1
Det ser ut som att raden export { ... } begränsar exporterna. (Jag var inte medveten om att det är möjligt att göra det i ett declare module-block!) Om jag tar bort den raden, då exporteras allt som standard och jag kan komma åt typerna.
Svar #2
För att få åtkomst till dina metoder under en gemensam förälder (t.ex. similarity), behöver du importera dem under aliaset similarity:
import * as similarity from "string-similarity";
similarity.compareTwoStrings("potato", "tomato");
