Typescript Javascript TypingsDefinition
最近在使用dbus-native來讓後端service可以接收DBUS訊號以及發出訊號至DBUS
因為使用typscript開發習慣了(想當初寫JS才發現有強型別的定義真的..差很多),所以一開始就在找這隻檔案的定義檔有沒有放到@types的倉庫
OK...沒有
這個意思就是說,假若說我想要使用DBUS的話我必須要自行去定義,或者...乾脆直接硬幹
硬幹的話大概就是加入以下的東西就可以使用
import dbus = require("dbus-native");
可是這樣就是沒有定義檔的提示可以使用
對於已經被TS養大胃口的我來說就很不方便...
(另外一提,在javascript也是有IDE做提示function使用,不過Linux沒辦法使用visual studio,eclipse 吃資源,Webstorm沒錢 QQ)
對於這種IntelliSense,可以使用以下的方法添加最基本的支持(不過這對我目前的專案支援度超低...)
在require dbus的package後,我們是會從index.js開始對整支程式存取及使用,網路上有人做出對於該項package轉definition的工具,可惜...沒用,以下是這支程式的一部分程式碼
我需要的是強型別的東西,這種轉換出來型別設定只會出現一堆的any
對於我之後設計其實蠻不好用的
所以就開始了漫長的CLASS定義之路
這是先對這整支程式做模組定義
然後再一步一步做下去
在模組中先宣告會用的一些dependency,就在模組中定義起來
這是宣告資料型態,一般來說單純傳輸用的data我會額外進行定義做成interface提示我傳出來的資料會長得如何
主戲登場,老實說太長了我擷取一小段就好,基本上會出現Obj是我已經懶得再TRACE下去了...callback function的宣告方式在定義檔中採用的是es6的arrow function
Typescript支援使用enum其實用法跟const差不多,就是當作狀態列表來做檢視
可以從第一個 =1 看出他的第一位設定從幾開始
這邊是跟enum去做區分 這邊是lib內原本就已經做好了相關的設定,不好再把它區分出來寫成enum
最後的部分,為了跟上頭(module.export)去做一個呼應,把它的定義根據前面的子型別的部分做出來
這是我的definition files 如果有興趣的話可以看一下
這是我所對其定義的專案
之後大概有可能應該的line-bot專案應該會做一個簡易的介紹吧...((都還沒完成X
清一下草稿的庫存 看一下之後還可以介紹啥...
module.exports = createConnection;
module.exports.createClient = function(params) {
var connection = createConnection(params || {});
return new MessageBus(connection, params || {});
};
module.exports.systemBus = function() {
return module.exports.createClient({
socket: '/var/run/dbus/system_bus_socket'
});
};
module.exports.sessionBus = function(opts) {
return module.exports.createClient(opts);
};
module.exports.messageType = constants.messageType;
module.exports.createConnection = module.exports;
我需要的是強型別的東西,這種轉換出來型別設定只會出現一堆的any
對於我之後設計其實蠻不好用的
所以就開始了漫長的CLASS定義之路
declare module "dbus-native"{
}
這是先對這整支程式做模組定義
然後再一步一步做下去
import * as net from "net";
import * as events from "events";
在模組中先宣告會用的一些dependency,就在模組中定義起來
interface msg {
destination?: string;
path?: string;
'interface'?: any;
member: string;
signature?: any;
body?: Array<any>;
}
這是宣告資料型態,一般來說單純傳輸用的data我會額外進行定義做成interface提示我傳出來的資料會長得如何
interface MessageBus {
connection: any;
serial: number;
cookies: Object;
listNames(callback?:(err,res)=>void);
listActivatableNames(callback?:(err,res)=>void);
updateActivationEnvironment(env:any,callback?:(err,res)=>void);
startServiceByName(name:any,flags:any,callback?:(err,res)=>void);
getConnectionUnixUser(name:any,callback?:(err,res)=>void);
:
:
}
主戲登場,老實說太長了我擷取一小段就好,基本上會出現Obj是我已經懶得再TRACE下去了...callback function的宣告方式在定義檔中採用的是es6的arrow function
enum flags {
noReplyExpected = 1,
noAutoStart
}
Typescript支援使用enum其實用法跟const差不多,就是當作狀態列表來做檢視
可以從第一個 =1 看出他的第一位設定從幾開始
const messageType : {
error:number,
invalid:number,
methodCall:number,
methodReturn:number,
signal:number,
}
這邊是跟enum去做區分 這邊是lib內原本就已經做好了相關的設定,不好再把它區分出來寫成enum
function createClient(options?: StreamOptions): MessageBus;
function createConnection(opts?: StreamOptions): CreateConnection;
function systemBus(): MessageBus;
function sessionBus(options?: StreamOptions): MessageBus;
function createServer(): Server;
最後的部分,為了跟上頭(module.export)去做一個呼應,把它的定義根據前面的子型別的部分做出來
這是我的definition files 如果有興趣的話可以看一下
這是我所對其定義的專案
之後大概有可能應該的line-bot專案應該會做一個簡易的介紹吧...((都還沒完成X
清一下草稿的庫存 看一下之後還可以介紹啥...
留言
張貼留言