Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为lambda内部的局部变量创建类型定义?_Javascript_Typescript_Visual Studio_Uwp - Fatal编程技术网

Javascript 如何为lambda内部的局部变量创建类型定义?

Javascript 如何为lambda内部的局部变量创建类型定义?,javascript,typescript,visual-studio,uwp,Javascript,Typescript,Visual Studio,Uwp,所以我决定将专有方法添加到类的实例中,但这扼杀了我的类型信息。以下是我要说的: window.onload = async () => { let picker = new Windows.Storage.Pickers.FolderPicker() picker.fileTypeFilter.append("*") let files = await (await picker.pickSingleFolderAsync()).getFilesAsync(),

所以我决定将专有方法添加到类的实例中,但这扼杀了我的类型信息。以下是我要说的:

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}
}
试试这个

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;
});
openedfile.createreaderat=at=>({
const reader=new Windows.Storage.Streams.DataReader(this.getInputStreamAt(at));
reader.byteOrder=Windows.Storage.Streams.byteOrder.littleEndian;
返回读取器;
});

您需要'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
是从方法调用继承的。