如何在 lambda 中为局部变量创建类型定义?
Posted
技术标签:
【中文标题】如何在 lambda 中为局部变量创建类型定义?【英文标题】:How to create a type definition for local variable inside lambda? 【发布时间】:2020-01-10 12:12:28 【问题描述】:所以我决定将专有方法添加到类的实例中,但这会扼杀我的类型信息。这就是我要说的:
window.onload = async () =>
let picker = new Windows.Storage.Pickers.FolderPicker()
picker.fileTypeFilter.append("*")
let files = await (await picker.pickSingleFolderAsync()).getFilesAsync(),
file = files.filter(value => value.fileType == ".RMX").pop(),
zonefiles = files.filter(value => value.fileType.startsWith(".Z"))
console.log(file.name)
console.log(zonefiles)
const openedfile = await file.openAsync(Windows.Storage.FileAccessMode.Read)
openedfile.createreaderat = at =>
const reader = new Windows.Storage.Streams.DataReader(this.getInputStreamAt(at))
reader.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian
return reader
let datareader = openedfile.createreaderat(0) //gets type of any
我正在使用 Visual Studio 2017 社区版,并创建了一个 UWP JS 应用。
任何想法 d.ts 文件的外观如何以减轻问题并为我的datareader
提供适当的类型?
我假设这样的东西应该可以工作,但它给了我语法错误:
window.onload = async () =>
const openedfile: ...: Windows.Storage.Streams.RandomAccessStream,
createreaderat: (at: number) => Windows.Storage.Streams.DataReader
【问题讨论】:
你需要`createreaderat`方法的类型,如果原始对象不是你的,那么你需要扩展该对象并在d.ts文件中添加具有适当类型的新方法。但是您不需要使用 d.ts 文件。你可以使用at => ...: Windows.Storage.Streams.DataReader;
@jcubic 如果可能的话,我想保留用 js 编写的内容,但在附加文件 d.ts
中添加类型。
什么是Storage.Pickers.FolderPicker
?这是一个库是 d.ts 文件还是 typescript 类中的这个接口?
openedfile
的类型是什么?它是否存在于.d.ts
文件中?如果是这样,您可以将其添加到您的帖子中吗? (如果.d.ts
不太大,最好发布所有相关的现有类型,FolderPicker
及其定义中使用的类型)。
这是 UWP。这两个标识符都存在于 SDK 随附的 .d.ts 文件中。我的意思是第二个openedfile
继承自方法调用。
【参考方案1】:
试试这个...
openedfile.createreaderat = at => <Windows.Storage.Streams.DataReader>(
const reader = new Windows.Storage.Streams.DataReader(this.getInputStreamAt(at));
reader.byteOrder = Windows.Storage.Streams.ByteOrder.littleEndian;
return reader;
);
【讨论】:
以上是关于如何在 lambda 中为局部变量创建类型定义?的主要内容,如果未能解决你的问题,请参考以下文章