You can easily extend the ‘knockout’ or any other TypeScript namespace.
Example: create knockout-extension.d.ts file
/// <reference path="<path-to-typings-dir>/knockout/index.d.ts" />
declare module 'knockout' {
export interface CustomType {
customField: string;
customMethod(arg1: number, arg2: boolean): boolean;
}
namespace customNamespace {
export interface AnotherCustomType {
customField1: string;
customField2: boolean;
}
}
// NOTE: extending existing interface
export interface KnockoutStatic {
customMethod(): void;
}
}
Note: ensure that this file is picked-up by the TypeScript compiler.
Use the newly defined types from the extended module.
// one way
import { CustomType } from 'knockout';
const foo: CustomType;
// second way
import * as kc from 'knockout';
const foo: kc.CustomType;
const bar: kc.customNamespace.AnotherCustomType;
For more info on modules and namespaces you can check TypeScript documentation on Modules and Namespaces and using them together.
Cheers!