說我想和喜歡的接口標記功能必需的屬性:打字稿:聲明函數與功能
interface TaggedFun {
(args): void;
tag: boolean;
}
看來它不能夠實際申報匹配這個簽名的函數(如任何函數文字將會丟失所需的tag
屬性);
唯一的選擇是使tag
成爲可選項,並記住之後爲其分配一個值。
是否有任何方法來保持這種類型安全(即在類型中的標籤要求)?
說我想和喜歡的接口標記功能必需的屬性:打字稿:聲明函數與功能
interface TaggedFun {
(args): void;
tag: boolean;
}
看來它不能夠實際申報匹配這個簽名的函數(如任何函數文字將會丟失所需的tag
屬性);
唯一的選擇是使tag
成爲可選項,並記住之後爲其分配一個值。
是否有任何方法來保持這種類型安全(即在類型中的標籤要求)?
您可以在一個工廠函數創建TaggedFun
實例:
interface TaggedFun {
(): void;
tag: boolean;
}
function taggedFactory(tag: boolean, fn?:() => void): TaggedFun {
let tagged = (fn || function() {
// function body here
}) as TaggedFun;
tagged.tag = tag;
return tagged;
}
這樣,你總是知道你有tag
屬性(如果您創建使用工廠的實例),你會得到類型安全。
例如:
function doSomething(tagged: TaggedFun) {}
doSomething(() => { }); // error
doSomething(taggedFactory(true)); // ok
doSomething(taggedFactory(true,() => { })); // ok
不是一個乾淨的方式,它的方式就像你說的那樣。
這是爲了支持老式的JavaScript,而不是類,你會得到具有額外屬性的函數。
我會敦促你考慮使用類。
這必須是一個功能和打字稿似乎不喜歡靶向ES5延伸時的功能。但是,我想看看我是否可以在構造函數中完成這項工作.... –