我想让TS从它的属性类型推断出通用接口的类型参数
sequelize.query('show tables').then(function(rows) {
console.log(JSON.stringify(rows));
});
但这不适用于接口。 TS说
通用类型“ I1”需要1个类型参数
对于功能有效
interface I1<T> {
prop: T
}
const i1: I1 = { prop: 'something' } // -> T is string
因此,对于函数TS而言,它仅推断类型实参,而对于接口而言,则不是。问题是,热使TS推断接口的类型参数吗?欢迎任何解决方法
答案 0 :(得分:1)
声明新变量时,您需要输入B
的类型
T
答案 1 :(得分:1)
可以从类型注释中推断出或指定变量的类型。没有中间立场可以用来推断变量类型的一部分。
唯一的解决方法(除了明确声明类型外)是使用一个函数,该函数在推断出内容方面更加灵活:
$.post("exportGraphs", {
esporta_tutto: JSON.stringify(jsonChart)
}).done(function() {
var fileName = jsonChart["id"] + ".txt";
var url = "/files/"+fileName;
var link = document.getElementById('a-esporta-grafico');
if (typeof link.download === 'string') {
link.download = fileName;
link.href = url;
link.setAttribute('style', 'text-decoration: none;')
//simulate click
link.click();
//remove the link when done
link.setAttribute("href", "#");
}
}).fail(function(xhr, ajaxOptions, thrownError) {
alert(thrownError);
});
});
或者使用IIFE,尽管它对于可读性而言可能是可怕的:
interface I1<T> {
prop: T
}
function makeI1<T>(o: I1<T>) { return o}
const i1 = makeI1({ prop: 'something' }) // const i1: I1<string>